Проверка ввода при вычислениях - 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 для завершения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д