Как защитить программу от сбоя при вводе - C (СИ)
Формулировка задачи:
Всем привет.
Подскажите, пожалуйста, возможно ли это реализовать и как.
Пользователь вводит некоторые данные. Допустим в 5 переменных. Некоторые вводят переменные в строку через пробел, а затем только нажимают enter.
Как защитить программу от сбоя при вводе, например 6 переменных? Да, знаю, что если будут введены цифры, то это будет проигнорировано, а что если буквы?
Пример:
Входные данные: 100 300 400 Slovo 45453 sboi
Как избежать сбой после ввода шестой переменной и реально ли вообще?
Всем заранее спасибо
scanf("%d%d%d%s%d", &kodm, &kodp, &kods, name, &kol);Решение задачи: «Как защитить программу от сбоя при вводе»
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;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные: строковая переменная
stringтипаcharразмером в 256 символов и целочисленная переменнаяdigitтипаint. - Выводится сообщение с просьбой ввести строку и целое число.
- Запускается цикл while, который будет выполняться до тех пор, пока функция scanf не считает корректно строку и целое число (то есть не вернет значение 2).
- Внутри цикла, если ввод был неверным (то есть scanf вернул значение меньше 2), то буфер ввода (stdin) очищается с помощью функции fflush, а в журнал ошибок (stderr) выводится сообщение об ошибке.
- Если ввод был корректным, то цикл прерывается и значения переменных выводятся на экран.
- В конце программы возвращается 0, что означает успешный конец работы программы.