之前在学习到相关的内容的时候,发过一篇相关的文章,但是最近使用发现仍然不能很好地区别与灵活使用者三种输入方式,所以在这里分方面做一些区分和应用场景举例。
一、区分
输入字符
什么时候执行,可以输入的数据,冲突处理,剩下的怎么办
char ch;
cin >> ch;//回车后才会执行操作;会忽略空格制表符与换行符等;如果第一个输入的与变量类型冲突,会造成cin为false,cin.fail()和cin.eof()变成true;剩下的会留在输入序列中
cin.get(ch);//与下面的基本相同,不同的是这一个是一个输入流类,而下一个会返回一个int值表示输入的ASCII码;
ch = cin.get();//立即执行;会接受输入的每个字符,包括空格等;如果冲突会造ch = EOF(-1),
ch = getline(cin, 1);//回车之后才会执行;对读取输入的每个字符;;剩下的留在输入序列中
输入字符串
string str;
cin >> str;//会将换行符留在输入序列中
cin.get();//不能赋值给string型变量
getline(cin, str);//注意,getline是string库中的方法,程序开头要有相应的头文件
cin.getline;//不能获取string类数据
char cha[10];
cin >> ;//不能使用cin将获取的内容赋值给字符串数组
cin.get(cha, 100);//100表示最大接收量,剩下的会留在输入序列中
getline(cin, cha, '\n');//\n表示输入结束标志,当遇到\n时停止输入,将前面的包括\n赋值;会将换行符留在输入序列中
cin.getline(c, 100);//会丢弃换行符
二、应用场景
cin
获取基本数据类型
cin.get()
读取一个字符,它可以读取空格等,但是不能读取换行符
cin.getling()
获取整行数据,它可以规定获取的字数,会将末尾的换行符丢弃
getline()
获取整行数据,它可以赋值给string类,会将换行符留在输入序列中
1、获取单个数据
cin >> a;
cin.get();//使用cin输入时会将换行符留在输入序列,所以需要清除
2、获取多个数据
while (cin >> a >> b) {
c = a + b;
}
//输入时使用空格将两个数据隔开,按回车之后就会依次读取进入两个变量中
2、单个字符依次输入并对其中的某些字符进行判定
while (ch = cin.get()) {
if (ch == -1)
break;
i++;
}
//会一直持续读取字符并进行操作,直到发生类型冲突,ch = cin.get()返回false,或者是break
3、获取整行字符
cin.getline(cha, 30);//使用cin.getline(a, 30)读取整行数据,可以规定字数,更加安全,并丢弃换行符
getline(cin, cha/str, '/n')//使用getline()读取整行数据,不可以规定字数,但是可以使用string型变量,也比较安全,会将换行符留在输入序列中