2014-10-18 81 views
1

该程序应该读取输入的数字并确定它们是偶数还是奇数。 然后它需要显示奇数和偶数以及输入数字的平均值。当输入0时它会停止。输入后程序挂起

我的问题是,它只是在输入第一个数字后挂起。

#include "stdio.h" 
int main(void) 
{ 
    int oddcount = 0, evencount = 0; /* Count of even and odd numbers. */ 
    int number; 
    float avge = 0, avgo = 0;  /* Average for even and odd numbers. */ 
    int evennum = 0, oddnum = 0; 

    printf("Enter a number or enter 0 to stop: "); 
    scanf_s("%i", &number); 
    while(number != 0) 
    { 
     if(number % 2 == 0) 
     { evencount = evencount + 1; 
      evennum += number; } 
     else 
     { oddcount = oddcount + 1; 
      oddnum += number; } 
    } 

    if(oddnum != 0) 
     avgo = oddnum/oddcount; /* Finding the odd average. */ 

    if(evennum != 0) 
     avge = evennum/evencount; /* Finding the even average. */ 

    printf("Here is the count odd %i and even %i numbers.\n", oddcount, evencount); 
    printf("And their averages %f odd and %f even.\n", avgo, avge); 

    return 0; 
} 
+0

的你到底有'同时添加其他scanf函数的另一种方法(数!= 0)'循环。如果用户输入的数字不是零,该循环将如何退出? – shf301 2014-10-18 19:29:29

+0

看看shekhar suman的回答,它会解决你的问题。 – Jite 2014-10-18 20:29:40

+0

此行:scanf_s(“%i”,&number);不读取整数。也许你的意思是:scanf_s(“%d”,&number);但是,这不会消耗用户在键入第一个数字后按下Enter键时生成的'\ n'。建议使用:scanf_s(“%d”,&number);这将消耗白色空间,然后获得数字。此外,在循环中,不再输入数字,因此数字永远不会更新。所以循环永远不会结束。 – user3629249 2014-10-19 01:14:39

回答

1

您在第一个之后没有读取新的数字。尝试类似

while(scanf("%d", &number) == 1 && number != 0){ 
//Count evens and odds 
} 

你能处理这种事情是在你的while循环

+0

这真是太棒了,程序运行就像我想要的一样!非常感谢你 – ChrisHoward 2014-10-18 20:34:59

+0

@ChrisHoward这确实有效。还有其他方法可以解决它,比如将读数添加到while循环中(然后需要首先初始化数字变量)。可能很高兴知道你的进一步研究:) – Jite 2014-10-18 20:37:55

1

因为它是一个无限循环......

while(number != 0) 
{ 
    if(number % 2 == 0) 
    { evencount = evencount + 1; 
     evennum += number; } 
    else 
    { oddcount = oddcount + 1; 
     oddnum += number; } 
} 

在这里,您的while循环变量的指导从未number被修改,这与它保持不变,因此迭代,while条件remans真正为有史以来...

可能的解决方案似乎是: -

int number=1;  // just for initialisation with a non-zero number... 
while(number != 0) 
{ 
    printf("Enter a number or enter 0 to stop: "); 
    scanf_s("%i", &number); 
    if(number % 2 == 0) 
    { evencount = evencount + 1; 
     evennum += number; } 
    else 
    { oddcount = oddcount + 1; 
     oddnum += number; } 
} 
+0

这个*可能的解决方案*不能解决程序“悬挂”*的问题。 – yulian 2014-10-18 20:10:39

+0

@ YulianKhlevnoy - 如果用户在特定的迭代中输入0会怎样? – 2014-10-18 20:12:12

+0

只需运行你的代码。 – yulian 2014-10-18 20:14:39