【问题标题】:How to loop if input number is negative如果输入数字为负数如何循环
【发布时间】: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 &gt;&gt; num1 &gt;&gt; num2 &gt;&gt; num3)) { /* error in input */ }
  • @Someprogrammerdude 但是,将 -1 解析为 unsigned int,可能会令人惊讶地产生巨大的正值而不是错误。
  • @moooeeeep 啊,我知道为什么会这样……这是因为输入是由std::strtoull 解析的(参见this)。如果值超出范围(例如负数),则返回ULLONG_MAX(并且errno 设置为ERANGE)。在读取和验证时需要考虑到这一点。
  • @Someprogrammerdude 发现了一个关于这个的问题:stackoverflow.com/questions/7677158/…

标签: c++ function median


【解决方案1】:

您可以使用 do-while 循环编写代码:

do {
   cout << "Enter 3 integers" << endl;
   cin >> num1;
   cin >> num2;
   cin >> num3;
} while ((num1 < 0) || (num2 < 0) || (num3 < 0));

否则只有一个while循环:

while (true) {
   cout << "Enter 3 integers" << endl;
   cin >> num1;
   // if any number is -ve, continue the whole loop
   if (num1 < 0) continue;
   cin >> num2;
   if (num2 < 0) continue;
   cin >> num3;
   if (num3 < 0) continue;
   // if every number is positive, just break out of the loop
   break; 
}

希望对你有帮助,谢谢 - 拉杰库马尔

【讨论】:

    【解决方案2】:
    cout << "Enter 3 integers" << endl;
            cin >> num1;
            cin >> num2;
            cin >> num3;
    
                while(num1 < 0 || num2 < 0 || num3 < 0)
                {
                    if (num1 < 0)
                    {
                        cout << "Your first number [" << num1 << "] is negetiv. Please enter a positive number!";
                        cin >> num1;
                    }
                    if (num2 < 0)
                    {
                        cout << "Your second number [" << num2 << "] is negetiv. Please enter a positive number!";
                        cin >> num2;
                    }
                   if (num3 < 0)
                    {
                        cout << "Your third number [" << num3 << "] is negetiv. Please enter apositive number!";
                        cin >> num3;
                    }
                }
    

    在打印数字后不要忘记等待用户按键:

    cin;

    system("pause");

    【讨论】:

      【解决方案3】:

      你可以使用for循环来输入数字。

      当用户输入任何负数时,您可以显示错误消息并退出主函数。

      例如:

      double num[3];
      
      cout << "Enter 3 positive integers" << endl;
      for(int i=0; i<3; i++) {
          cin >> num[i];
          if (num[i] < 0 ) {
              cout << "Only 3 positive integers are allowed";
              return 0;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        相关资源
        最近更新 更多