我在 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;
}
答案 0 :(得分:4)
scanf
接受指针作为%c
的参数。换句话说,
scanf("%c \n",ch);
应写成:
scanf("%c\n",&ch);
如果没有引用运算符(&
),scanf
会收到ch
的值。在这种情况下,值为垃圾,因为ch
未设置。*引用ch
为scanf
提供指向 ch
的指针,而不是{{} 1}}本身,因此ch
可以通过取消引用指针(使用解引用运算符scanf
)来修改ch
的值。
*这实际上是未定义的行为。
答案 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)
关于风格的一些评论:
char ch
)。声明它们是非静态的也是不好的。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;
}