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

How do I handle excess characters read from cin?

本文关键字:读取 多余 字符 cin 何处理 处理      更新时间:2023-10-16

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

所以我认为它存储了array1[30]的额外字符,并在linesNum1中使用它。

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

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

我相信你正在寻找的是std::cin.ignore(INT_MAX);

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

编辑:

除了cin之外,ignore()是要添加的第二个可选参数:

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

将忽略,直到行尾

您需要刷新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;
...