我对此代码有疑问。一切似乎工作正常,但当你键入这样的东西:123aaaddfa123然后程序将接受这个双值。有什么想法可以避免这个问题?谢谢。
int main ()
{
const char MAX = 5;
cout << "Weight of your fishes (maximum 5)" << endl;
double fishes[MAX];
char count = 0;
while (count < MAX)
{
cout << count + 1 << ". fish: " << endl;
if (cin >> fishes[count])
count++;
else {
cin.clear();
if (cin.get() == 'q') //no more fishes = quit
break;
while (cin.get() != '\n') //clearing cin buffer
continue;
}
}
if (count > 0) {
double sum = 0;
for (int i = 0; i < MAX; ++i) {
sum += fishes[i];
}
cout << "Avarage weight of your " << (int)count << " fishes is: " << sum / count << " KG" << endl;
}
}
答案 0 :(得分:0)
这是输入或转换功能的常见问题。输入>>
运算符将尽可能多地使用字符,并将剩余部分留给上次读取。它是按设计,因为它允许读取相同的行,如12.50$
或12.50 $
,在数字和货币符号之间有或没有空格:
double val;
std::string curr;
std::cin >> val >> curr;
如果在特定情况下您希望能够在数值后检测到额外字符,则必须将整个字符作为字符串读取。如果它在面向行的输入中,则应使用getline
,因为字符串输入将在第一个空白字符(空格,制表符等)处停止
假设您有std::string str
包含您的输入,您可以执行以下操作:
char *end;
double val = strtod(str.c_str(), &end);
if (*end != 0) {
// there is something after last character used for the double
}