gpt4 book ai didi

C++ 检查 cin 的输入是否有正确的数据

转载 作者:行者123 更新时间:2023-11-28 04:49:20 25 4
gpt4 key购买 nike

您好,我正在开发一个程序,该程序正在检查用户输入并要求用户在数据与程序正在寻找的类型不匹配时重新输入(在本例中我正在寻找 double 据类型)。以下是我当前的代码。

#include <iostream>
using namespace std;


int main()
{
//Declare Variables and define.
double var1,
var2,
var3,
var4,
var5,
sum,
avg;



cout << "Input Five Values to be averaged. Press Enter to Continue" << endl;

do {
cin.clear();
cin.ignore();
cout << "Input first value:" << endl;
cin >> var1;


} while(cin.fail());

do {
cin.clear();
cin.ignore();
cout << "Input second value:" << endl;
cin >> var2;


} while (cin.fail());



do {
cin.clear();
cin.ignore();
cout << "Input third value:" << endl;
cin >> var3;


} while (cin.fail());



do {
cin.clear();
cin.ignore();
cout << "Input Fouth value:" << endl;
cin >> var4;


} while (cin.fail());


do {
cin.clear();
cin.ignore();
cout << "Input fifth value:" << endl;
cin >> var5;


} while (cin.fail());




//Sum the values.
sum = var1 + var2 + var3 + var4 + var5;

//Calculate the Average of Sum.
avg = sum / 5;

// Display the results.
cout << "The average is: " << avg << endl;

system("pause");


return 0;
}

当我输入“aa”、“s2”或“2ss”时出现问题,它不会再次请求数据一次,但对于 cin 中的字符数,或者在“s2”的情况下/“22s”它将转到下一个输入请求。为什么会发生这种情况,我该如何纠正这种行为?

提前致谢!

最佳答案

代替 cin.ignore();,使用:

cin.ignore(std::numberic_limits<std::streamsize>::max(), '\n');

这将忽略 256 个字符,或直到换行符之前的每个字符(以先到者为准)。截至目前,您只能从缓冲区中清除一个字符,正如您发现的那样,这并不总是足够的。

感谢@Arnav 和@Dietmar 提供适当数量的忽略字符!

关于C++ 检查 cin 的输入是否有正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532754/

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