我正在尝试使用 isalpha()
来验证输入并确保它不是字母。我已尝试正确使用它,但我想我可能遗漏了一些东西。
有问题的部分:
scanf("%i", &entry);
while (entry != 0) {
if (isalpha(entry)) {
printf("That isn't a number\n");
printf("Please type a number or \"0\" to quit\n");
scanf("%i", &entry);
} else {
// Do code stuff
}
当我使用数字时,代码运行完美,但是当我为 entry
输入一个字母时,代码只会转储所有其他行。我是否必须将 entry
重新声明为 int?我应该使用不同的循环吗?我应该以其他方式验证输入吗?
isalpha
检查字符是否为字母。当您输入一个与 ASCII value 不对应的整数时,它将返回 false如果输入的整数是 EOF
或在 unsigned char
范围内,则为字母表,否则,您的代码将表现出未定义的行为。
要修复您的代码,entry
应该是 char
并且 scanf
必须使用 %c
来扫描它.或者,如果您希望 entry
为整数,请检查 scanf
是否返回 0。如果返回 0,则 scanf
无法扫描整数,因为用户输入了其他内容。您的代码将如下所示:
while((scanf("%d", &entry))==0) //scanf failed to scan an int
{
printf("That isn't a number\n");
printf("Please type a number or \"0\" to quit\n");
scanf("%*s");//remove the invalid character(s) from the stdin
}
我是一名优秀的程序员,十分优秀!