【问题标题】:When I input 3 even numbers it shows that I input 4当我输入 3 个偶数时,它显示我输入了 4
【发布时间】:2018-10-15 13:13:05
【问题描述】:
#include <iostream>
using namespace std;

int main(){
   int odd=0, even=0, value;
   cout<<"Enter Numbers\n";
   cout<<"Enter 0 to End\n";
   do{

      cin>>value;
      if (value % 2==0)
         even++;
      else
         odd++;
   }    
   while (value !=0);

   cout<<"The number of odd numbers is: "<<odd<<endl;
   cout<<"The number of even numbers is: "<<even;

   return 0;
}

出了点问题,我需要帮助,当我结束程序时,偶数总是 +1。

【问题讨论】:

  • 理想情况下,您应该在处理此类情况之前检查退出条件。
  • @BasileStarynkevitch 现在橡胶鸭肯定会在我的笔记本电脑包里!

标签: c++


【解决方案1】:

问题是当你输入 0 结束循环时,它会在退出循环之前将其计为偶数...

改为输入0就中断,使用无限循环

for (;;)
{
    cin>>value;
    if (!value) break;  // stop now
    if (value % 2==0)
    even++;
    else
    odd++;  
}

如 cmets 中所述,另一种方法是使用条件 while 循环,如果输入失败,该循环将短路并针对零测试该值。在这种情况下,您不需要在循环中测试零:

while ((cin >> value) && value) { ... }

【讨论】:

  • 真的,循环应该是while ((cin &gt;&gt; value) &amp;&amp; value)
  • 你是对的,这是避免无限循环的最佳方法。我并没有尝试循环提供最佳答案,我对这么多的赞成票感到非常惊讶......我会编辑,因为你的建议非常好。
  • 不是“iif (!value)”,而是“if (value == 0)”。你在做一个数字测试,而不是一个逻辑测试!
  • 好吧,这只是个人喜好问题:stackoverflow.com/questions/7900934/…。在这里可以看出至少有 2 个程序员在 sn-p 上工作,因为我会写 if (value % 2==0) if (value % 2) { odd++; } else {even++;}
【解决方案2】:
0 % 2 == 0

这也算偶数

【讨论】:

    【解决方案3】:

    在处理之前检查您是否有有效的输入是一种很好的编程习惯。 检查输入然后决定是否需要处理(检查它是偶数还是奇数)的类似方法应该可以解决您的问题。

    正如上述答案之一所建议的,在处理之前检查有效输入应该可以解决您的问题: if (!value) break; // stop now

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2015-06-30
      • 2022-01-15
      • 2018-02-22
      • 1970-01-01
      相关资源
      最近更新 更多