如何处理从cin读取的多余字符?

时间:2013-06-12 14:45:39

标签: c++

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

所以我认为它会存储来自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];

2 个答案:

答案 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;
...