gpt4 book ai didi

c - 使用 isalpha() 导致文本转储

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:30 25 4
gpt4 key购买 nike

我正在尝试使用 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
}

关于c - 使用 isalpha() 导致文本转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com