Проверка ввода при вычислениях - 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 для завершения программы