计数器问题

时间:2016-01-13 23:23:48

标签: c++

我是C ++的新手,并且有一个编辑此代码的工作分配。出于某种原因,当我使用多个正数或负数的组合时,它给出了我输入多个数字的额外数字的答案。

示例:

我输入3个正数和1个负数。计数器显示4个正面和1个负面。如果我从负数而不是正数开始,也会发生同样的事情。

非常感谢任何帮助。这是代码:

#include <iostream>
using namespace std;

int main()
{
    int number   = 0;
    int positive = 0;   //counter
    int negative = 0;   //counter
    int totalPositive = 0;
    int totalNegative = 0;

    //get a number
    cout << "Enter a positive or negative integer (enter 0 to end): ";
    cin >> number;

    while (number != 0)
    {
        //update counters
        if (number > 0)
        {   
            positive =+ 1;
        }   
        else 
            negative =+ 1;

        //end if

        //get another number
        cout << "Enter another positive or negative integer (enter 0 to end): ";
        cin >> number;
        totalPositive += positive;
        totalNegative += negative;
    }//end while

    //display counters
    cout << endl;
    cout << "Total positive numbers: " << totalPositive << endl;
    cout << "Total negative numbers: " << totalNegative << endl;

    system("pause");
    return 0;
}   //end of main function

6 个答案:

答案 0 :(得分:1)

totalPositive正在积累,但totalPositive++正在积累你的积累。在if语句中尝试positive(以及否定版本),并删除变量negative和{{1}}。

答案 1 :(得分:1)

首先请注意=+不是运算符(与增加值的+=不同)

该行

positive =+ 1

只是解释为分配+1为正(这是你想要的)但可以写成

positive = 1

这虽然带来了实际的一点,即每次循环时你都不会将正或负重置为零。

正面和负面都分配给1(即,当您至少输入其中一个时),每次totalPositivetotalNegative都会增加。

您可能想要考虑是否需要变量为正数或负数。

答案 2 :(得分:1)

您的计划中的逻辑错误是,positivenegative一旦设置为0,就永远不会重置为1

如果你的前两个数字是一个是负数而另一个是正数,那么totalPositivetotalNegative会随之增加,而不管number的值是多少

您可以将逻辑简化为:

//get a number
cout << "Enter a positive or negative integer (enter 0 to end): ";

while (cin >> number && number != 0)
{
   //update counters
   if (number > 0)
   {   
      ++totalPositive;
   }   
   else 
   {
      ++totalNegative;
   }

   //get another number
   cout << "Enter another positive or negative integer (enter 0 to end): ";
}//end while

答案 3 :(得分:1)

试试这段代码:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int number;
    int positive = 0;
    int negative = 0;

   do{

        cout << "Enter a positive or negative integer (enter 0 to end): ";
        cin >> number;

        if (number > 0)
           positive += 1;

        else if(number<0)
           negative += 1;


    }while(number!=0);
    //end while

    //display counters
    cout << endl;
    cout << "Total positive numbers: " << positive << endl;
    cout << "Total negative numbers: " << negative << endl;

    system("pause");
    return 0;
}   //end of main function

您不必使用total positivetotal negative,除非您希望得到正数和负数的总和。

答案 4 :(得分:0)

可能有用的东西就是为while循环执行此操作

while (number != 0)
{
positive = 0;
negative = 0;
//update counters
if (number > 0)
{   
    positive = 1;
}   
else 
   negative = 1;

//end if

//get another number
cout << "Enter another positive or negative integer (enter 0 to end): ";
cin >> number;
totalPositive +=positive;
totalNegative +=negative;
}

否则你每次循环运行时都会做这个基本上是1 + 2 + 3 + 4 ...的事情。通过将每个值设置为0,可确保totalPositive仅在每个循环中增加一次。否则它会呈指数级增长

答案 5 :(得分:0)

循环结束后,你的计数器不会重置为0。

第一次进入循环时,计数器为0(正,负),但第二次,计数器仍为1,导致计数器错误。

进入循环时:

positive = 0;
negative = 0;

//update counters

这段代码可以进行高度重构,以提高效率,但这是另一个问题。