总和未正确添加

时间:2016-02-22 17:43:57

标签: c addition

#include <stdio.h>

#define MINIMUM 1
#define MAXIMUM 20

int main ()
{
//Declaring variables.
char name[50];
int number, even_sum, odd_sum, even_count, odd_count;

//Sets all variables to zero.
even_sum=0;
odd_sum=0;
even_count=0;
odd_count=0;

//Asks the user to enter their name and their choice of numbers.
printf("Please enter your first name.\n");
    scanf("%s", name);

printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
    scanf("%d", &number);

//Begins loop to decide if the numbers entered are even or odd and adding them to respective totals.
while (number>=MINIMUM && number<=MAXIMUM)
{
    printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
        scanf("%d", &number);

    if (number%2==0)
    {
    even_sum += number;
    even_count++;
    }

    else
    {
    odd_sum+=number;
    odd_count++;
    }
}

//Separating each line makes it easier to read. The following lines print out the final count and totals of all numbers entered.
printf("\n%s, the numbers you entered are broken down as follows:\n\n", name);
printf("You entered %d even numbers with a total value of %d.\n", even_count, even_sum);
printf("You also entered %d odd numbers with a total value of %d.\n", odd_count, odd_sum);


return 0;
}

我最后一次运行它时使用了整数2,4,3,并退出0。 输出说我有2个偶数条目,总值为4。 另外,我有1个奇数条目,总共3个。

奇数输出是正确的,但偶数总是错误的,我无法弄清楚我做错了什么。

4 个答案:

答案 0 :(得分:1)

很难说什么是错误的,因为提供的代码片段没有全面展示。  你在减少

  

变量?

请进行一些测试并提供结果,例如1,3,5,7,11,13。

-

修改

正如@Deddy发现的那样,你需要在循环中添加一个exit语句, 所以,当用户提供0时,请跳过它

if (number>0){
      if (number%2==0)
      {
....
}

不要忘记关闭括号: - )

答案 1 :(得分:0)

你得到3个偶数,因为你的输入不是2 4 3,它是2 4 3 0。

当你输入0时,程序正在等待scanf上的输入,然后继续检查是否输入0。

因为0%2 == 0你向偶数计数器加了1,然后你检查了while条件,发现输入为0并且停止了while循环。

新代码之后: 当您的程序要求您输入下一个号码时,您在while循环外输入的第一个号码将丢失,您从未将其添加到任何计数器,因此您的程序自然不会考虑它。

您输入了号码,之后您立即要求提供新号码。 我的一位教授曾经告诉我 - 如果一台计算机进行了计算,但没有存储它 - 是否进行了计算?

解决问题的方法之一是将while循环中的scanf移动到循环的末尾。

这样,第一个数字将计算到结果,导致退出的输入不会。

File.open('new_edf.edf', 'wb') { ... }

答案 2 :(得分:0)

因此决定使用额外的变量重构逻辑循环

#include <stdio.h>

#define MINIMUM 1
#define MAXIMUM 20

int main ()
{
    //Declaring variables.
    char name[50];
    int number, even_sum, odd_sum, even_count, odd_count;
    bool  canWeGo;

    //Sets all variables to zero.
    even_sum=0;
    odd_sum=0;
    even_count=0;
    odd_count=0;
    canWeGo=true;

    while (canWeGo)
    {
        printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
            scanf("%d", &number);

        canWeGo = number>=INIMUM && number<=MAXIMUM;

        if (canWeGo)
        {
            if (number%2==0)
            {
                even_sum += number;
                even_count++;
            }
            else
            {
                odd_sum+=number;
                odd_count++;
            }
        }   
    }

    /Separating each line makes it easier to read. The following lines print out the final count and totals of all numbers entered.
    printf("\n%s, the numbers you entered are broken down as follows:\n\n", name);
    printf("You entered %d even numbers with a total value of %d.\n", even_count, even_sum);
    printf("You also entered %d odd numbers with a total value of %d.\n", odd_count, odd_sum);

    return 0;
}

答案 3 :(得分:0)

问题是您在进入循环后丢弃了第一个数据,因为您正在再次读取它(因此丢弃它)

你最好移动printf(); scanf()的;循环中的序列到它的结尾,所以你确实可以在数据输入正常时使用它。

您的代码中存在两个问题:您正确地检查输入数据是否在两个限制之间以进入处理,但是一旦进入循环,您将丢弃这些数据以用于新数据。这使得数据不再被检查(因此它可以是用于退出循环的令牌数据,这使得它可以作为数据处理,但它不能)。并且您将must_not作为数据处理,并且第一个数据完全被忽略。

要解决您的问题,解决方案可以是将循环中的{ "from": 0, "size": 1000, "filter": { "bool": { "must": [ { "nested": { "path": "data", "query": { "match": { "data.city": "california" } } } } ], "must_not": [ { "term": { "_id": "01921asda01201" } } ] } } } 序列移动到它的最后部分,在这种情况下,您将在第一个数据案例中处理数据,而不是最后输入0时再次进入循环。