Сделать проверку на символы при вводе - C (СИ)
Формулировка задачи:
Сделал прогу на задачу"Дано натуральное число, равное выраженной в копейках цене некоторого товара, например 317, 100, и т.д. Выразить цену в гривнях и копейках, например 3 гривни 17 копеек... Написать на С.
Осталось сделать проверку на ввод символов, чтоб если вводятся символы, то выбивалась ошибка и снова произвести ввод.
include<stdio.h>
#include<conio.h>
void main(void)
{
clrscr();
int k,g,n,m,l;
printf("Введите количество копеек n=");
scanf("%d",&n);
g=n/100;
k=n%100;
m=g%10;
l=k%10;
if(g>10&&g<20)
printf("%d гривeн ",g);
else if(m==1)
printf("%d гривнa ",g);
else if (m>=2&&m<5)
printf("%d гривны ",g);
else
printf("%d гривен ",g);
if(k>10&&k<20)
printf("%d копеек ",k);
else if(l==1)
printf("%d копейка\n",k);
else if(l>=2&&l<5)
printf("%d копейки\n",k);
else
printf("%d копеек\n",k);
getch();
}Решение задачи: «Сделать проверку на символы при вводе»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
/*
возвращает 0, если в строке только целое число, после последней цифры не должно быть пробелов,
перевода строки, или ещё чего-нибудь
*/
int testVal(const char *str){
while ( isspace(*str) )
++str;
if ( *str == '+' || *str == '-' )
++str;
while ( *str && isdigit(*str) )
++str;
return *str;
}
int getIntVal(){
int val;
char buf[32] = {0};
do {
printf("Enter some integer value: ");
if ( scanf("%31s", buf) != 1 ){
fprintf(stderr, "Can't get some value!\n");
exit(1);
}
} while ( testVal(buf) && printf("Bad value!\n") );
return atoi(buf);
}
int main(void){
int i;
i = getIntVal();
printf("You entered %i\n", i);
return 0;
}
Объяснение кода листинга программы
- Программа включает в себя файлы
, , и . - Функция testVal проверяет, является ли строка числом. Возвращает 0, если в строке только целое число, после последней цифры не должно быть пробелов, перевода строки, или ещё чего-нибудь.
- В функции getIntVal() используется цикл do-while для получения значения от пользователя до тех пор, пока это значение не будет корректным.
- В цикле используется функция testVal() для проверки введенного значения.
- Если значение некорректно, выводится сообщение об ошибке.
- Когда значение будет корректным, оно преобразуется в целое число с помощью функции atoi и сохраняется в переменной i.
- В конце программы выводится значение i.