2014-11-30 3 views
0

Это проблема из учебника. Мне нужно, чтобы пользователи могли вводить целые числа и видеть наибольшие и подсчитывать, сколько раз появляется наибольшее число. У меня все работает, кроме подсчета. Я пытался выяснить это на прошлой неделе.C наибольшее количество

#include <stdio.h> 
#include <limits.h> 

int bigEof(void); 
int main(void){ 
bigEof(); 
} 

int bigEof(){ 
int num; 
int big; 
int numOld; 
int count = 0; 
int programFinish = 0; 
big = INT_MIN; 

printf("Please enter an integer: "); 

while (programFinish == 0){ 
    scanf("%d", &num); 
    if (num > big) 
    { 
     big = num;   
    } 
    numOld = num; 
    if (numOld == big){ 
     count++; 
    }else 
     count--; 
    printf("Please enter next Integer <EOF> to stop: "); 
    printf("The current biggest number is %d and is repeated %d times.", big, count); 
} 
return big; 
} 
+1

Почему 'else count -'? Фактически, вся эта вещь с 'numOld' полностью избыточна. Просто 'count ++' после' big = num'. В качестве побочного примечания функция 'bigEof' возвращает значение, которое не используется ни для чего позже, оно также ничего не может вернуть. Функция 'main', с другой стороны, которая должна возвращать значение в соответствии с его объявлением, делает ** ** не так (обычно возвращает 0 при успешном завершении). –

+2

Как и во всех таких вопросах, ответ прост: научитесь использовать ваш отладчик, затем выполните свой код по строкам и убедитесь, что ваши переменные - это то, что вы ожидаете от них. – dandan78

+0

Это не большой E, это большая сигма капитала, греческая С. – philipxy

ответ

0

Функция может быть определен следующим образом

void bigEof() 
{ 
    int num; 
    int big; 
    int count = 0; 

    printf("Please enter an integer: "); 

    while (scanf("%d", &num) == 1) 
    { 
     if (count == 0 || big < num) 
     { 
      big = num; 
      count = 1; 
     } 
     else if (big == num) 
     { 
      ++count; 
     } 

     printf("Please enter next Integer <EOF> to stop: "); 
    } 

    if (count != 0) 
    { 
     printf("The current biggest number is %d and is repeated %d times\n", big, count); 
    } 
    else 
    { 
     puts("You did not enter numbers."); 
    } 
} 
+0

Почему бы не инициализировать big до 0 в верхней части, а затем в первом if-statement просто сделать, если (большой iveqy

+0

@iveqy В чем смысл инициализации большого значения 0 ?! –

+0

Потому что, если вы удаляете счетчик == 0, большой iveqy

0

Там нет необходимости count--, и вы будете иметь, чтобы сбросить ваше count значения каждый раз, когда вы получаете новое значение для big.

#include <stdio.h> 
#include <limits.h> 

int bigEof(void); 
int main(void){ 
bigEof(); 
} 

int bigEof(){ 
int num; 
int big; 
int numOld; 
int count = 0; 
int programFinish = 0; 
big = INT_MIN; 

printf("Please enter an integer: "); 

while (programFinish == 0){ 
    scanf("%d", &num); 
    if (num > big) 
    { 
     big = num; 
     count = 0;   
    } 
    numOld = num; 
    if (numOld == big){ 
     count++; 
    } 
    printf("Please enter next Integer <EOF> to stop: "); 
    printf("The current biggest number is %d and is repeated %d times.", big, count); 
} 
return big; 
} 
+0

Итак, когда programFinished! = 0 и что, если num - INT_MIN, тогда это приведет к ошибке сегмента, так как big используется неинициализировано. – iveqy

+0

в соответствии с вопросом, я очистил код для подсчета для повторения наибольшего числа, –

+0

Подсчет не работает, если не было введено число или только INT_MIN. (или хорошо работает счет, но не результат printf, который является частью проблемы подсчета). – iveqy