gpt4 book ai didi

c++ - cin.clear() 不重置 cin 对象

转载 作者:可可西里 更新时间:2023-11-01 16:37:50 29 4
gpt4 key购买 nike

我有以下循环。它应该读取数字直到 EndOfFile,或者用户输入 -999

int arr[100];

int index;

for (index = 0; index < 100; index++)
{
cin >> arr[index];
if (!cin)
{
cin.clear();
index--;
continue;
}
if (arr[index] == -999)
{
break;
}
}

当用户输入一个无效的东西时,比如一些char,这个循环会一直重复,而不清除错误状态或停止。

最佳答案

调用 clear 后,您还必须以某种方式从流中删除无效输入。这是一种方法:

 cin >> arr[index];
if (!cin)
{
cin.clear();
std::string ignoreLine; //read the invalid input into it
std::getline(cin, ignoreLine); //read the line till next space
index--;
continue;
}

这是因为当 cin 无法读取无效输入时,它会保留在流中。必须通过某种方式将其删除。我只是阅读并忽略它。

你也可以使用 ignore 作为:

cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),' ');

在我看来,如果输入以空格 分隔(并且如果您不想检查 无效输入),这会更好。 online doc说:

istream::ignore

istream& ignore( streamsize n = 1, int delim = EOF );

Extract and discard characters

Extracts characters from the input sequence and discards them.

The extraction ends when n characters have been extracted and discarded or when the character delim is found, whichever comes first. In the latter case, the delim character itself is also extracted.

关于c++ - cin.clear() 不重置 cin 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413247/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com