Проверка ошибок для символа при чтении в целых числах в C

Для моего класса программирования я написал программу для вычисления суммы делителей. Итак, я дошел до своей последней части, которая относится к проверке ошибок, с которой у меня возникают проблемы, если я читаю символ. Я раньше искал на SO, а также пытался что-то выяснить и не смог найти решение, которое работает для бесконечных отрицательных чисел до 100.

Когда я нажимаю на символ, он устанавливает его в 0 и просто идет до конца, где я хочу, чтобы он вышел, как только он прочитает его в

int main (void){
int userIN=0;
int i = 0;
int next = 0;
int temp= 105;
int cycle;
puts("Enter up to 10 integers less than or equal to 100");
while(scanf("%d ", &userIN) !=EOF && (i < 10))
{
  if(userIN > 100){
   printf("Invalid Input\n");
   exit(1);  
  }
  else if(userIN < 100)
  {

Спасибо за помощь в продвижении

РЕДАКТИРОВАТЬ: программа проходит через правильно, моя проблема проверки ошибок для ввода символа не что-нибудь с самим кодом

2 ответа

scanf() возвращает значение, отличное от EOF если он не может прочитать значения, указанные в строке формата (например, с %d, он встречает данные как foo). Вы можете проверить это. Предостережение заключается в том, что он не читает оскорбительные данные из stdinтак что это все еще будет там, чтобы повлиять на следующий вызов scanf() - что может привести к бесконечному циклу (scanf() сообщить об ошибке, позвоните scanf() опять же, он сталкивается с тем же вводом, поэтому выдает ту же ошибку).

Возможно, вам лучше прочитать целую строку ввода, используя fgets(), Затем проверьте ввод вручную или используйте sscanf() (обратите внимание на дополнительные s во имя). Преимущество такого подхода состоит в том, что легче избежать бесконечного цикла при неожиданном вводе пользователем.

Вы могли бы пока i меньше 10. Первый if увидит, что scanf не удалось. Если это так, входной буфер очищается, и цикл while пытается снова. Если EOF захвачен, то exit, Если scanf успешен, вход сравнивается со 100, а если в диапазоне, счетчик цикла while увеличивается.
декларировать int ch = 0;

while ( i < 10) {
    printf("Enter %d of 10 integers. (less than or equal to 100)\n", i + 1);
    if(scanf(" %d", &userIN) != 1)
    {
        while ( ( ch = getchar()) != '\n' && ch != EOF) {
            //clear input buffer
        }
        if ( ch == EOF) {
            exit ( 1);
        }
    }
    else {
        if(userIN > 100){
            printf("Invalid Input\n");
        }
        else
        {
            i++;// good input advance to the next input
            printf("Valid");
        }
    }
}
Другие вопросы по тегам