Сделать проверку на символы при вводе - 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;
}

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

  1. Программа включает в себя файлы , , и .
  2. Функция testVal проверяет, является ли строка числом. Возвращает 0, если в строке только целое число, после последней цифры не должно быть пробелов, перевода строки, или ещё чего-нибудь.
  3. В функции getIntVal() используется цикл do-while для получения значения от пользователя до тех пор, пока это значение не будет корректным.
  4. В цикле используется функция testVal() для проверки введенного значения.
  5. Если значение некорректно, выводится сообщение об ошибке.
  6. Когда значение будет корректным, оно преобразуется в целое число с помощью функции atoi и сохраняется в переменной i.
  7. В конце программы выводится значение i.

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


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

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

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