Input
输入一串数字,自动存入数组,遇到回车结束
vector<int> array;//定义一个vector数组array
int number;
while (1) {
cin >> number;
array.push_back(number);//每输入一个数字就把它添加到数组的最后
if (cin.get() == '\n')//如果是回车符则跳出循环
break;
}
1.cin
cin>>a;
cin遇到空格停止;
2.cin.getline()//used for char*
此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\n’。其语法为:
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
cin.getline(a,10,'\n');//事实上它只可以读入9个字符,最后一个位置给结束符
3.getline()//used for string
头文件:#include
istream& getline ( istream &is , string &str , char delim );
其中,istream &is 表示一个输入流,譬如cin;
string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);
char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入)。
Example:
string line;
getline(cin,line,’#’);
输入"You are the #best!" ,输入流实际上只读入了"You are the ",#后面的并没有存放到line中(应该是在缓冲区里吧)。即line="You are the "
5.cin.get()
get 成员函数读取单个字符,包括任何白色空格字符。
使用方法:
char ch
cin.get (ch);
ch = cin.get();
如果程序正在使用 get 函数简单地暂停屏幕直到按回车键,并且不需要存储字符,则该函数也可以这样调用:
cin.get();
或者用于读取数组来结束掉读取
while (1) {
cin >> number;
array.push_back(number);//每输入一个数字就把它添加到数组的最后
if (cin.get() == ‘\n’)//如果是回车符则跳出循环
break;
}
注意:
while(getline(cin,line))语句
注意这里默认回车符停止读入,按Ctrl+Z或键入EOF回车即可退出循环。
首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。
然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数。
所以,以下的写法根本不可能让你推出while()循环的:
while(getline(cin,line))
//永远无法跳出循环
混用cin与cin.get()
cin后面接cin.get()会出现问题!!!!
当 cin>> 语句读取用户输入的数据时,它会在遇到换行符时停止。换行字符未被读取,而是仍保留在键盘缓冲区中。从键盘读取数据的输入语句只在键盘缓冲区为空时等待用户输入值,但现在不为空。
当 cin.get 函数执行时,它开始从先前输入操作停止的键盘缓冲区读取,并发现了换行符,所以它无须等待用户输入另一个值。这种问题最直接的解决办法是使用 cin.ignore 函数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1FXlxPd-1623829857921)(…/…/markdown/picture/2-1Q114130JI45.gif)]