C中的数据验证

时间:2010-08-12 03:56:21

标签: c validation

我在 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 个答案:

答案 0 :(得分:4)

scanf接受指针作为%c的参数。换句话说,

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

应写成:

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

如果没有引用运算符(&),scanf会收到ch。在这种情况下,值为垃圾,因为ch未设置。*引用chscanf提供指向 ch指针,而不是{{} 1}}本身,因此ch可以通过取消引用指针(使用解引用运算符scanf)来修改ch的值。

还有Himadri mentioned

的数字检查问题

*这实际上是未定义的行为

答案 1 :(得分:1)

哦,阿伦非常愚蠢的错误。 在你的第二个条件中,如果你必须在单引号中使用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");

}

可能这是唯一的错误。现在,它应该工作。

答案 2 :(得分:0)

关于风格的一些评论:

  1. conio.h和clrscr()是非标准的。
  2. 全局变量不好(char ch)。声明它们是非静态的也是不好的。
  3. 始终检查scanf的返回值。这将帮助您捕获输入格式错误。 在这种情况下,由于我们只需要一个字符,getchar更合适。
  4. 这就是我写这个程序的方式:

    #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;
    }