C++ 如何处理从cin读取的多余字符?
在下面的代码中,当我运行它时,如果我在运行时输入了超过30个字符,它将不会读取C++ 如何处理从cin读取的多余字符?,c++,C++,在下面的代码中,当我运行它时,如果我在运行时输入了超过30个字符,它将不会读取linesNum1或text[] 因此,我认为它存储了array1[30]中的额外字符,并在linesNum1中使用它 那么,即使我输入的字符超过array1所能容纳的字符数,我如何清除程序的缓存,或使其cin成为linesNum1和text[] char array1[30]; for (int i = 0; i<30; i++) cin >> array1[i]; int linesNum
linesNum1
或text[]
因此,我认为它存储了array1[30]
中的额外字符,并在linesNum1
中使用它
那么,即使我输入的字符超过array1
所能容纳的字符数,我如何清除程序的缓存,或使其cin
成为linesNum1
和text[]
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];
chararray1[30];
对于(int i=0;i>array1[i];
int LINESUM1;
cin>>linesNum1;
int linesNum2=linesNum1*80;
字符文本[linesNum2];
对于(int i=0;i>文本[i];
对于(int i=0;i cout您需要刷新stdin
缓冲区,以清除可能的额外字符
您可以使用放弃流中的所有可用字符:
//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');
//将放弃所有内容,直到达到EOF。
cin.ignore(数值限制::max());
//将丢弃所有内容,直到到达新行。
cin.ignore(数值限制::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;
...
/*读取30个字符*/
对于(int i=0;i>array1[i];
/*丢弃线上所有多余的字符*/
cin.ignore(数值限制::max(),'\n');
/*清除流状态标志*/
cin.clear();
cin>>linesNum1;
...
我相信您正在寻找的是std::cin.ignore(INT_MAX);
这将读取并忽略所有内容,直到EOF。此外,您很可能希望在此之前执行std::cin.clear();
,以重置流
编辑:
与cin一起,ignore()是附加模块的可选第二个参数:
std::cin.ignore(INT_MAX,'\n');
你问了一个非常好的问题,不太可能有人会否决你。这个问题的答案有一些避免输入缓冲区溢出的建议:我在我的程序头中使用了名称空间std;
,你能解释一下这个答案吗??