Проверка ввода при вычислениях - C (СИ)
Формулировка задачи:
есть вот такой код. нужна защита от дурака: если будут введены буквы, то сообщается об ошибке.
переменные должны быть int обязательно. заранее спасибо.
int x_m; //координата х точки М int y_m; //координата у точки М printf("Enter coordinates x of M:"); scanf("%d", &x_m); printf("Enter coordinates y of M:"); scanf("%d", &y_m);
Решение задачи: «Проверка ввода при вычислениях»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <string.h> #include <stdlib.h> #include <ctype.h> typedef enum {False, True} Bool; Bool correctNumber(char[]); int main() { setlocale(2, ".1251"); printf("Введите число: "); char number[] = ""; //вводим число в строку scanf("%s", number); int d; //вот переменная int, которая так нужна if (correctNumber(number)) //если ввод _целого_ числа корректен { d = (int)atof(number); //присваиваем переменной int перевод нашей строки в тип int printf("Вы ввели: %d", d1); } else printf("Неверный ввод!"); return 0; } //функция проверяет _только целые_ числа, для чисел с запятой функция не подойдет! Bool correctNumber(char n[]) { unsigned i; //тип int вмещает в себя числа от -2147483648 (11 символов с минусом) до 2147483647(10 символов) if (n[0] == '-') { if (strlen(n) > 12) return False; } else if (strlen(n) > 11) return False; if (isdigit(n[0]) || n[0] == '-') //если первый символ либо цифра, либо '-' { for (i = 1; i < strlen(n); i++) if (!isdigit(n[i])) return False; } else return False; return True; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем тип enum для булева значения
- Объявляем функцию correctNumber, которая будет проверять корректность ввода целого числа
- Устанавливаем локальную настройку для вывода подстановки числа
- Выводим сообщение для ввода числа
- Объявляем переменную char number[] = `` для ввода числа
- Считываем введенное число в переменную number с помощью функции scanf
- Объявляем переменную int d для хранения числа
- Проверяем корректность введенного числа с помощью функции correctNumber
- Если число корректно, преобразуем его в тип int и присваиваем значение переменной d
- Выводим сообщение с введенным числом
- Если число некорректно, выводим сообщение
Неверный ввод!
- Возвращаем 0 для завершения программы
- В функции correctNumber проверяем, является ли первый символ числа -1, и если да, то проверяем длину строки
- Если первый символ не является -1, проверяем, является ли он цифрой
- Если первый символ является -1, проверяем, что все последующие символы являются цифрами
- Если первый символ не является -1, проверяем, что он является цифрой
- Если условие не выполняется, возвращаем False
- Если условие выполняется, возвращаем True
- В функции main() возвращаем 0 для завершения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д