Как защитить программу от сбоя при вводе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Подскажите, пожалуйста, возможно ли это реализовать и как. Пользователь вводит некоторые данные. Допустим в 5 переменных. Некоторые вводят переменные в строку через пробел, а затем только нажимают enter. Как защитить программу от сбоя при вводе, например 6 переменных? Да, знаю, что если будут введены цифры, то это будет проигнорировано, а что если буквы? Пример:
scanf("%d%d%d%s%d", &kodm, &kodp, &kods, name, &kol);
Входные данные: 100 300 400 Slovo 45453 sboi Как избежать сбой после ввода шестой переменной и реально ли вообще? Всем заранее спасибо

Решение задачи: «Как защитить программу от сбоя при вводе»

textual
Листинг программы
#include <stdio.h>
 
int main()
{
   char string[256];
   int digit;
 
   printf("inptut string and digit:\n");
 
   while (scanf("%s%d", string, &digit) != 2)
   {
      fflush(stdin);
      fprintf(stderr, "Error input... Repeat...\n");
   }
   fflush(stdin);
 
   printf("string: %s\ndigit: %d\n", string, digit);
 
   return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены две переменные: строковая переменная string типа char размером в 256 символов и целочисленная переменная digit типа int.
  2. Выводится сообщение с просьбой ввести строку и целое число.
  3. Запускается цикл while, который будет выполняться до тех пор, пока функция scanf не считает корректно строку и целое число (то есть не вернет значение 2).
  4. Внутри цикла, если ввод был неверным (то есть scanf вернул значение меньше 2), то буфер ввода (stdin) очищается с помощью функции fflush, а в журнал ошибок (stderr) выводится сообщение об ошибке.
  5. Если ввод был корректным, то цикл прерывается и значения переменных выводятся на экран.
  6. В конце программы возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы