Реализовать проверку ввода целого числа - C (СИ)
Формулировка задачи:
Есть обычный запрос ввода целого числа:
Как реализовать проверку, чтобы если введено не число (а например какая либо буква), то повторяло запрос на ввод.
Спасибо.
int n; ... printf("ВВедите позицию n: "); scanf("%d", &n);
Решение задачи: «Реализовать проверку ввода целого числа»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int n; int length; int i,flag; char str[80]; while(1){ i=1; flag=1; printf("write: "); scanf("%c",&str[0]); if(!((str[0]>48&&str[0]<58)||str[0]==45)){flag=0;} while(1){ scanf("%c",&str[i]); if(str[i]==*"\n"){break;} if(str[i]<48||str[i]>58){flag=0;} i++; } if(flag==1){break;} } n=atoi(str); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с консолью и строками
include
include
include
- Объявляем переменные: — n - для хранения целочисленного значения — length - для хранения длины строки — i - для итерации по символам строки — flag - для контроля корректности ввода — str - массив символов для хранения введенной строки
- Запускаем бесконечный цикл, прерываемый только при корректном вводе while(1){
- Устанавливаем начальные значения переменных: — i = 1 — flag = 1
- Выводим приглашение для ввода
printf(
write:
); - Считываем первый символ
scanf(
%c
,&str[0]); - Проверяем, является ли первый символ числом или знаком пунктуации if(!((str[0]>48&&str[0]<58)||str[0]==45)){flag=0;}
- Считываем остальные символы до конца строки или до появления символа новой строки
while(1){
scanf(
%c
,&str[i]); if(str[i]==*\n
){break;} if(str[i]<48||str[i]>58){flag=0;} i++; } - Если все символы являются числами, то флаг равен 1, иначе - 0
- Если флаг равен 1, то выходим из цикла
- Преобразуем строку в целое число и сохраняем его в переменной n n=atoi(str);
- Завершаем программу return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д