c++ - 在预期错误的用户输入的情况下获得数字的平均值
问题描述
#include <iostream>
#include <string>
using namespace std;
int main(void) {
float sum, counter = 0, num;
string d;
bool t = true;
while (t) {
cin >> num;
sum = sum + num;
counter += 1;
while (cin.fail())
{
cin.clear();
cin.ignore();
cin >> d;
if (d == "done") {
t = false;
continue;
} else {
cout << "Invalid" << endl;
continue;
}
}
}
cout << sum << ' ' << counter << ' ' << (sum / counter);
return 0;
}
**所以我试图通过输入猜测来计算输入数字的平均值,如下所示:
4 5 BadInput 7
-----
Expected output should be:
Enter a number: 4
Enter a number: 5
Enter a number: bad data
Invalid
Enter a number: 7
Enter a number: done
16 3 5.333333333333333
我的代码有什么问题?
解决方案
主要问题是
cin.ignore();
该程序将读取用户输入并尝试将其解释为数字。当您进入"done"
程序时无法解释它并std::cin.fail()
会返回true
. 但std::cin.ignore()
删除第一个字符和
cin >> d;
读取"one"
。程序不会离开循环。
消除
cin.ignore();
下一个问题是未初始化的变量sum
。线
sum = sum + num;
导致未定义的行为。
我发现的最后一个问题是这个片段
cin >> num;
sum = sum + num;
counter += 1;
该程序尝试将输入读入float
num
. 然后,即使读取失败,它也会将num
to的值相加并递增计数器。sum
您应该首先检查读取是否失败。
这是对您的代码的可能修复:
#include <iostream>
#include <string>
int main(void) {
float sum = 0, counter = 0, num = 0;
std::string d;
bool t = true;
while (t) {
std::cin >> num;
if (!std::cin.fail()) {
sum = sum + num;
counter += 1;
}
while (std::cin.fail()) {
std::cin.clear();
std::cin >> d;
if (d == "done") {
t = false;
continue;
} else {
std::cout << "Invalid\n";
continue;
}
}
}
std::cout << sum << ' ' << counter << ' ' << (sum / counter);
return 0;
}
推荐阅读
- javascript - 修复定时攻击
- python - 如何使用 TreeExplainer shap 图表的 y 轴标签创建列表?
- c - 在 OpenGL 中更改视图透视图时出错
- google-apps-script - 如何从 Google Apps 脚本库验证范围?
- python - 比较两个文件的第二列并计算百分比增加或减少
- stata - Stata menbreg - 较低级别的集群标准错误
- rust - 非穷举匹配 i32,即使它是
- firebase - 纠正 BuildContext 错误的最佳方法是什么?
- c++ - 二进制搜索是“可交换的”吗?
- python - 使用 pylanguagetool (Python) 时的 CMD 输出