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

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем тип enum для булева значения
  3. Объявляем функцию correctNumber, которая будет проверять корректность ввода целого числа
  4. Устанавливаем локальную настройку для вывода подстановки числа
  5. Выводим сообщение для ввода числа
  6. Объявляем переменную char number[] = `` для ввода числа
  7. Считываем введенное число в переменную number с помощью функции scanf
  8. Объявляем переменную int d для хранения числа
  9. Проверяем корректность введенного числа с помощью функции correctNumber
  10. Если число корректно, преобразуем его в тип int и присваиваем значение переменной d
  11. Выводим сообщение с введенным числом
  12. Если число некорректно, выводим сообщение Неверный ввод!
  13. Возвращаем 0 для завершения программы
  14. В функции correctNumber проверяем, является ли первый символ числа -1, и если да, то проверяем длину строки
  15. Если первый символ не является -1, проверяем, является ли он цифрой
  16. Если первый символ является -1, проверяем, что все последующие символы являются цифрами
  17. Если первый символ не является -1, проверяем, что он является цифрой
  18. Если условие не выполняется, возвращаем False
  19. Если условие выполняется, возвращаем True
  20. В функции main() возвращаем 0 для завершения программы

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


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

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

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