gpt4 book ai didi

c - 在 C 中使用 While 循环强制用户输入整数

转载 作者:行者123 更新时间:2023-11-30 16:27:08 25 4
gpt4 key购买 nike

我试图让用户输入一个整数,以便稍后在程序中使用,我希望它强制用户输入一个输入,直到它是一个整数。当我运行这段代码时,它会像这样无限循环:

Enter smallest operator: Enter smallest operator: Enter smallest operator: Enter smallest operator: Enter smallest operator: Enter smallest operator:..........

我认为问题出在扫描仪上,但我不确定应该如何处理它。

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

int main(int argc, const char * argv[]) {

char operator;
int largestOpperator, smallestOpperator;

printf("Enter The Table Operator (+, -, *, /, %%, or R): ");
scanf("%c",&operator);

/*while(!(operator == '+' || operator == '-' || operator == '*' || operator == '/' ||operator == '%' || operator == 'R'))
{

printf("Enter Appropriate Table Operator (+, -, *, /, %%, or R): ");
scanf(" %c",&operator); //requires space as a way to skip the enter when char is scanning!!
}*/

do{
if(!isdigit(smallestOpperator))
printf("Enter smallest operator: ");
else{
printf("Enter an actual number: ");
scanf(" %d", &smallestOpperator);
}

}while(!isdigit(smallestOpperator));


printf("Enter largest operator: ");
scanf("%d", &largestOpperator);

{
printf("Enter a valid integer: ");
scanf("%d", &largestOpperator);
}


return 0;
}

最佳答案

显然 isdigit(smallestOperator) 返回 false,因为这是 while 的条件,并且您看到了无限循环。

检查 smallestOperator 值的明智方法是在调试器中运行代码——这将显示变量的类型、它的值、它的值内存中表示 - 您可能需要的一切。

实现相同目标的一种更肮脏的方法是在代码中添加调试 printfs,在检查之前打印该值。

但是,我们可以看到您正在使用 scanf("%d", ...) 来读取 smallestOperatorscanf 的联机帮助页显示:

d - Matches an optionally signed decimal integer; the next pointer must be a pointer to int.

因此,您从 scanf 获取一个整数,然后测试它是否是一个数字字符

您有两种选择来解决此问题:

读取一个字符,测试它,转换它

从 scanf 获取一个char:scanf("%c", &smallestOperatorAsChar) -- 然后用 isDigit() 测试它,然后将其转换为整数:Convert a character digit to the corresponding integer in C

(更好)让 scanf() 告诉您有关转换错误的信息

无论如何,您应该始终检查 IO 调用的返回值。 scanf() 返回成功转换的项目数。如果它少于您预期的数量,您可以使用它来触发错误处理。

int rc = scanf("%d", &i);
char junkChar;
while(rc < 1) {
printf("Invalid");
scanf("%c", &junkChar);
rc = scanf("%d", &i);
}

参见:why does scanf not wait for user input after it fails one time? -- 其中接受的答案指出 scanf() 不是一个很好的标准输入机制,因此您不应该太努力地尝试解决它:要么通过编写自己的例程来进行控制围绕 fgets() 或引入更聪明的库。

关于c - 在 C 中使用 While 循环强制用户输入整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52838218/

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