【发布时间】:2020-02-21 11:44:33
【问题描述】:
输入验证:
如果数字为负数,程序应输出错误并让用户重试。只需要一次迭代(即您的程序不需要提示输入另外三个数字,它可以在打印结果后退出)。
所以我已经完成了作业,我唯一缺少的是如上所述的输入验证。换句话说(据我所知),我应该在我的代码中实现一个循环,如果用户之前输入了一个负数,他们必须输入另外 3 组数字。
#include <iostream>
#include <iomanip>
using namespace std;
double getAverage (double num1, double num2, double num3){
double averageAmount;
averageAmount = (num1 + num2 + num3)/ 3;
return averageAmount;
}
double getMedian (int num1, int num2, int num3){
int x = num1-num2;
int y = num2-num3;
int z = num1-num3;
if(x*y > 0) return num2;
if(x*z > 0) return num3;
return num1;
}
double countDigits( int num1){
int digits = 0;
while (num1){
num1 = num1/10;
digits++;
}
return (digits);
}
int main() {
double num1 = 0;
double num2 = 0;
double num3 = 0;
cout << "Enter 3 integers" << endl;
cin >> num1;
cin >> num2;
cin >> num3;
cout << "The average is " << fixed << setprecision(2) << getAverage(num1, num2, num3) << endl;
cout << "The median is " << fixed << setprecision(2) << getMedian(num1, num2, num3) << endl;
cout << "There are " << countDigits(num1) << " digits in the number " << num1 << endl;
return 0;
}
如果用户输入负数,我希望输出是“输入 3 个整数” //因为我们只需要正数
【问题讨论】:
-
如果您希望用户输入无符号整数值,请首先使用无符号整数类型作为输入。并进行错误检查(例如
unsigned int num1, num2, num3; if (!(std::cin >> num1 >> num2 >> num3)) { /* error in input */ }) -
@Someprogrammerdude 但是,将 -1 解析为 unsigned int,可能会令人惊讶地产生巨大的正值而不是错误。
-
@moooeeeep 啊,我知道为什么会这样……这是因为输入是由
std::strtoull解析的(参见this)。如果值超出范围(例如负数),则返回ULLONG_MAX(并且errno设置为ERANGE)。在读取和验证时需要考虑到这一点。 -
@Someprogrammerdude 发现了一个关于这个的问题:stackoverflow.com/questions/7677158/…