Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何处理从cin读取的多余字符?_C++ - Fatal编程技术网

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

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

在下面的代码中,当我运行它时,如果我在运行时输入了超过30个字符,它将不会读取
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;icout您需要刷新
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;
,你能解释一下这个答案吗??