C++ 当我输入3个偶数时,它显示我输入了4 #包括 使用名称空间std; int main(){ int奇数=0,偶数=0,数值; cout

C++ 当我输入3个偶数时,它显示我输入了4 #包括 使用名称空间std; int main(){ int奇数=0,偶数=0,数值; cout,c++,C++,问题是,当您输入0结束循环时,它会在退出循环之前将其计为偶数 而是在输入0后立即中断,并使用无限循环 #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

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

而是在输入0后立即中断,并使用无限循环

#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;
}
如注释中所述,另一种方法是使用条件
while
环路,如果输入失败,该环路将短路并根据零测试值。在这种情况下,您不需要在环路内测试零:

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

这也算作偶数

在处理输入之前检查输入是否有效是一种很好的编程实践。 这里有一种类似的方法,检查输入,然后决定是否需要处理(检查输入是偶数还是奇数),这样可以解决您的问题

正如上面的一个答案所建议的,在处理之前检查有效输入应该可以解决您的问题:
如果(!value)中断;//立即停止

阅读理想情况下,在处理此类情况之前,您应该检查退出条件。@BasileStryneVitch now橡皮鸭肯定会在我的笔记本电脑包中!确实,循环应该是
而((cin>>value)&&value)
你说得对,这是避免无限循环的最佳方法。我并没有试图在循环方面提供最佳答案,我对如此多的投票感到非常惊讶……我将进行编辑,因为你的建议非常好。不是“iif(!value)”,而是“if(value==0)”。你在做一个数字测试,而不是逻辑测试!好吧,这是一个品味的问题:。这里可以看到,至少有两个程序员在处理这个代码段,因为
if(value%2==0)
我本来会写
if(value%2){odd++;}else{偶数++}
while ((cin >> value) && value) { ... }
0 % 2 == 0