Проверка данных в C - PullRequest
       0

Проверка данных в C

3 голосов
/ 12 августа 2010

Я пробовал простую программу на C для проверки пользовательских данных. Предполагается, что программа определяет, является ли введенный пользователем символ числом, алфавитом или специальным символом.

Каким-то образом код идентифицирует каждый тип вводимого символа как число. Я добавил код ниже, я был бы признателен, если кто-то может указать, где я иду не так?

// Программа для ввода данных от пользователя и определения, является ли это символ, число или специальный символ

#include<stdio.h>
#include<conio.h>
#include<string.h>


    char ch;

int main()

{
     clrscr();

    printf("Enter a character \n");
    scanf("%c \n",ch);

    if ((ch>='A'&& ch<='Z')||(ch>='a'&& ch<='z') )
    {
        printf("The character entered is an alphabet \n" );

    }
     else if ((ch>=0)&&(ch<=9))
    {
        printf("Character entered is an number \n");
    }


    else
    {
        printf("Character entered is a special character");

    }
    return 0;
}

Ответы [ 3 ]

4 голосов
/ 12 августа 2010

scanf принимает указатель в качестве аргумента для %c. Другими словами,

scanf("%c \n",ch);

должно быть записано как:

scanf("%c\n",&ch);

Без опорного оператора (&), scanf принимает значение из ch. В этом случае значение является мусором, поскольку ch не установлено. * Ссылка ch дает scanf указатель на ch, а не ch, поэтому scanf можно изменить значение ch путем разыменования указателя (с помощью оператора разыменования, *).

Есть также проблема с проверкой цифр, что Химадри упомянул .

* Это на самом деле неопределенное поведение .

1 голос
/ 12 августа 2010

О, Арун, очень глупая ошибка. В вашем втором условии в else, если вы должны исправить 0 и 9 в одинарных кавычках.

Итак, ваш код будет -

if ((ch>='A'&& ch<='Z')||(ch>='a'&& ch<='z') )
{
    printf("The character entered is an alphabet \n" );

}
 else if ((ch>='0')&&(ch<='9'))
{
    printf("Character entered is an number \n");
}
else
{
    printf("Character entered is a special character");

}

Может быть, это единственная ошибка. Теперь это должно работать.

0 голосов
/ 12 августа 2010

Несколько комментариев по стилю:

  1. conio.h и clrscr () являются нестандартными.
  2. Глобальные переменные неверны (char ch). Объявление их нестатичными тоже плохо.
  3. Всегда проверяйте возвращаемое значение scanf. Это поможет вам поймать ошибки формата ввода. В этом случае, поскольку нам нужен только один символ, getchar является более подходящим.

Вот как бы я написал эту программу:

#include <stdio.h>
#include <ctype.h>

int main()
{
  int ch; /* We use an int because it lets us check for EOF */
  printf("Enter a character: ");
  fflush(stdout); /* Remember to flush the output stream */
  ch = getchar();
  if (ch == EOF)
    {
      printf("end-of-file or input-error\n");
      return 1;
    }
  if (isalpha(ch))
    printf("The character entered is an alphabet\n" );    
  else if (isdigit(ch))
    printf("Character entered is an number\n");    
  else
    printf("Character entered is a special character\n");    
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...