如下所示,我正在尝试制作一个简单的程序,该程序将从3个不同的数字组中找到3个平均值。第一学期,第二学期以及这两者的平均值。但是,在执行时,程序会打印出正确的第一个平均值,但绝不会经过第二个while循环,而最终以“nan”作为第二个平均值的值结束。
#include <iostream>
#include <ios>
#include <iomanip>
using namespace std;
int main() {
// First semester
cout << "Enter your first semester grades (Press enter for each new grade and write \"End\" to stop): ";
streamsize prec = cout.precision();
double grades1;
double sum1 = 0;
int count1 = 0;
while (cin >> grades1) {
count1++;
sum1 += grades1;
}
cout << "Your first semester average is: " << setprecision(3) << sum1 / count1 << setprecision(prec) << endl << endl;
// Second semester
cout << "Enter your second semester grades (Press enter for each new grade and write \"End\" to stop): ";
double grades2;
double sum2 = 0;
int count2 = 0;
while (cin >> grades2) {
count2++;
sum2 += grades2;
}
cout << "Your second semester average is: " << setprecision(3) << sum2 / count2 << setprecision(prec) << endl;
cout << "Your two semester average is: " << setprecision(3) << (sum1 / count1 + sum2 / count2) / 2 << setprecision(prec) << endl;
return 0;
}
最佳答案
我相信这是std::cin的问题。我在第一个while循环之后在代码中添加了新的检查:
if (cin.fail()) {
cout << "Cin in failed state" << endl;
}
上面的if条件起作用,这意味着cin处于失败状态,并导致第二个while循环无法启动。我尝试使用
cin.clear()
,但是没有用,我不确定如何清除cin上的失败位。另一种解决方案是编写一个适当的函数,该函数从用户处获取一个 double 值。
关于c++ - 第二个while循环未运行,将值设置为 “nan”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58358007/