我有这个程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i=0;
float reader, tot = 0;
while(i!=10)
{
cout << "Insert a number: " << endl;
cin >> reader;
if(cin)
{
tot += reader;
i++;
}
else
{
cout << "Error. Please retry." << endl;
cin.clear();
}
}
cout << "Media: " << tot/i << endl;
return 0;
}
在IF()中,我希望用户只在&#34;读者&#34;中插入FLOAT VALUES。变量。 我希望如果用户插入一个数字,程序会继续...否则程序应该重新要求用户插入正确的值。
如何检查INPUT?我尝试过TRY CATCH,但它没有用。
提前致谢!
答案 0 :(得分:3)
“如何检查INPUT?”
已经确定了
cin >> reader;
用户只能输入有效的float
值。检查有效性的方法是
if( cin >> reader ) {
tot += reader;
i++;
}
else {
cout << "Error. Please retry." << endl;
cin.clear();
std::string dummy;
cin >> dummy; // <<< Read invalid stuff up to next delimiter
}
“我试过TRY CATCH但是没有用。”
要从std::istream
操作中获取例外,请设置std::istream::exceptions
掩码。
答案 1 :(得分:2)
只需查看operator>>
的结果:
if (cin >> reader) {
// user gave you a float
tot += reader;
i++;
}
else {
cout << "Error. Please retry." << endl;
// clear the error flag on cin, and skip
// to the next newline.
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
答案 2 :(得分:0)
您的原始程序很好,除非您在收到错误时需要跳过该错误输入。仅仅清除错误是不够的:
#include <iostream>
#include <string>
#include <limits> // include this!!!
using namespace std;
int main()
{
int i=0;
float reader, tot = 0.0f; // tot needs to be float
while(i!=10)
{
cout << "Insert a number: " << endl;
if( cin >> reader )
{
tot += reader;
i++;
}
else
{
cout << "Error. Please retry." << endl;
cin.clear();
// Then you ned to skip past the bad input so you
// don't keep tripping the same error
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
cout << "Media: " << tot/i << endl;
return 0;
}
函数cin.ignore()
忽略尽可能多的输入字符,直到行尾字符'\n'
为止。 std::numeric_limits<std::streamsize>::max()
函数告诉我们可以存储在输入缓冲区中的最大可能字符数。
如果令人困惑的另一种方法是跳过错误的输入,只需将下一行读到std::string
。
else
{
cout << "Error. Please retry." << endl;
cin.clear();
// Then you need to skip past the bad input so you
// don't keep tripping the same error
std::string skip;
std::getline(cin, skip); // read the bad input into a string
}