2014-10-18 2 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

у вас есть 'While (число! = 0)' петля. Если пользователь вводит число, которое не равно нулю, как будет проходить этот цикл? – shf301

+0

Посмотрите на ответ шекхара-сумана, он решит вашу проблему. – Jite

+0

Эта строка: scanf_s ("% i", & number); не читает целое число. Возможно, вы имели в виду: scanf_s («% d», & number); однако, не потребляет «\ n», сгенерированный, когда пользователь нажимает клавишу ввода после ввода первого номера. предложите использовать: scanf_s ("% d", & number); который будет потреблять пустое пространство, затем получите номер. Кроме того, во время цикла больше не вводится число, поэтому число никогда не обновляется. Таким образом, цикл никогда не заканчивается. – user3629249

ответ

1

Вы не читаете новые номера после первого. Попробуйте что-то вроде

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

Другим способом вы могли бы справиться с этим бы быть, чтобы добавить еще один зсап в конце своего цикла While

+0

Это было потрясающе, программа работает так же, как и я! Большое вам спасибо – ChrisHoward

+0

@ChrisHoward Это действительно работает. Существуют и другие способы его решения, такие как добавление чтения в цикл while (и для этого требуется сначала инициализировать числовую переменную). Может быть, хорошо знать ваши дальнейшие исследования :) – Jite

1

Потому что это бесконечный цикл ...

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

Здесь ваше время петля направляющая переменная number никогда не изменяется, в промежутке между итерациями сохраняет его неизменным и, следовательно, условие в то время как 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

+0

@ YulianKhlevnoy-Что делать, если пользователь вводит 0 в конкретной итерации ??? –

+0

Просто запустите код. – yulian

Смежные вопросы