4

在下面的代码中,当我运行它时,如果我在运行时输入超过 30 个字符,它不会读取,linesNum1也不会读取text[]

所以我认为它存储了额外的字符array1[30]并在linesNum1.

那么如何清除程序的缓存,或者即使我输入的字符多于可以容纳的字符,也可以使它cin成为?linesNum1text[]array1

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];
4

2 回答 2

2

相信你要找的是std::cin.ignore(INT_MAX);

这将读入并忽略所有内容,直到 EOF。此外,您很可能也想std::cin.clear();在此之前做一个重置流。

编辑: 与 cin.ignore() 一起是可选的第二个参数添加:

std::cin.ignore(INT_MAX,'\n');

这将忽略直到行尾。

于 2013-06-12T14:52:05.070 回答
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;
...
于 2013-06-12T14:49:54.727 回答