Реализовать проверку ввода целого числа - 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; }