关于cin.ignore()函数的一个需要注意的地方

刚写小一段代码,input,isearch均是int类型,ivec是vector<int>类型

1   cout << "Enter integers:";
2 while (cin >> input)
3 ivec.push_back(input);
4
5 cin.clear();
6 cin.ignore(1024);
7
8 cout << "Which number do you want to search:";
9 cin >> isearch;

在运行中

输入:若干整数 回车 Ctrl-Z 回车

奇怪,没有跳出第8行代码,然后尝试不断的输入回车,依然没有运行到第8行,无奈再次放大招Ctrl-Z,没有回车,直接就跳出了“Which number do you want to search:2281472 appears 0 times.”

(请无视“appears 0 times”)跳出来后程序直接退出了,也就是第9行的cin没有执行

这里的2281472难道是Ctrl-Z的int值?不懂...

当时就觉得奇怪呀,这是怎么回事,运行不到后面的cin(也就是第9行)

 

后来将cin.ignore(1024)修改为cin.ignore(3)后再次编译运行

输入:若干整数 回车 Ctrl-Z 回车 回车 回车 回车

正常跳出了第8行代码,输入了 23 回车程序正常退出

 

因此得出个结论:

当调用cin.ignore(10)时候,那么如果在缓冲区中字符数不足10的时候,你的程序将暂停,直到你输入到缓冲区的字符数达到了10,这条语句才运行结束,之后的语句才能运行。

原文地址:https://www.cnblogs.com/wnarutou/p/2404719.html