在下面的代码中,当我运行它时,如果我在运行时输入超过30个字符它根本不会读取linesNum1
或text[]
。
所以我认为它会存储来自array1[30]
的额外字符,并在linesNum1
中使用它。
那么即使我输入的字符多于cin
可以容纳的字符,我该如何清除程序的缓存,或者linesNum1
text[]
和array1
?< / p>
char array1[30];
for (int i = 0; i<30; i++)
cin >> array1[i];
int linesNum1;
cin >> linesNum1;
int linesNum2 = linesNum1*80;
char text[linesNum2];
for (int i = 0; i < linesNum2; i++)
cin >> text[i];
for (int i = 0; i < linesNum2; i++)
cout << text[i];
答案 0 :(得分:2)
我相信你正在寻找的是std::cin.ignore(INT_MAX);
。
这将读入并忽略所有内容,直到EOF。此外,您也很可能希望在此之前执行std::cin.clear();
以重置流。
修改强> 与cin.ignore()一起是可选的第二个参数:
std::cin.ignore(INT_MAX,'\n');
直到行尾才会忽略。
答案 1 :(得分:1)
您需要刷新stdin
缓冲区才能删除可能的额外字符。
您可以使用istream::ignore
放弃流中的所有可用字符:
//Will discard everything until it reaches EOF.
cin.ignore(numeric_limits<streamsize>::max());
//Will discard everything until it reaches a new line.
cin.ignore(numeric_limits<streamsize>::max(), '\n');
示例:
/* read 30 chars */
for (int i = 0; i<30; i++) cin >> array1[i];
/* discard all extra chars on the line */
cin.ignore(numeric_limits<streamsize>::max(), '\n');
/* clear the stream state flags */
cin.clear();
cin >> linesNum1;
...