gpt4 book ai didi

c - isdigit() 函数没有按预期工作?

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

这是我的代码:

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

int main(void)
{
int limit;
float sum=0;
while(1){
printf("Enter the limit L: );
scanf("%d",&limit);
if(!isdigit(limit))
break;
for(int i=0;i<limit;i++){
sum+=(float)1/(i+1);
}
printf("Sum of the initial %d term(s): %f\n",limit,sum);
sum=0;
}
return 0;
}

如果输入整数,此程序计算从 n=1 到 n=L(从用户输入)的 1/n 的 sigma,并在输入非数字字符时退出。但似乎这个程序没有像我预期的那样工作:(我正在使用 LLVM 编译器)

wak@waksys:~$./a.out
Enter the limit L: 5000
wak@waksys:~$

程序结束时没有产生任何结果...所以我认为这部分可能存在一些问题:

if(!isdigit(limit))
break;

所以我尝试删除“!”。

if(isdigit(limit))
break;

然后我重新编译并执行了它。它似乎按预期工作但是......

Enter the limit L: 5000
Sum of the initial 5000 term(s): 9.094514
Enter the limit L: 1000
Sum of the initial 1000 term(s): 7.485478
Enter the limit L: 1
Sum of the initial 1 term(s): 1.000000
Enter the limit L: e
Enter the limit L: Sum of the initial 1 term(s): 1.000000
Enter the limit L: Sum of the initial 1 term(s): 1.000000
Enter the limit L: Sum of the initial 1 term(s): 1.000000
Enter the limit L: Sum of the initial 1 term(s): 1.000000
Enter the limit L: Sum of the initial 1 term(s): 1.000000
Enter the limit L: Sum of the initial 1 term(s): 1.000000
....
....

是的......它不会以无限循环结束(实际上,它是通过删除'!'的预期结果)

所以看起来 isdigit() 函数判断像 5000、1000 这样的数字不是整数。还是我的代码有问题?

最佳答案

isdigit 测试字符是否为字符集中的数字。也就是说,“1”是数字,但“x”不是。 '1' 有一个数值作为整数(在 ascii 中,它是 49) 当您输入 5000 时,scanf 将其转换为整数值,并且 5000(mod 256)可能不是 '0'、'1'、'2 ', ..., 或本地字符集中的 '9'。不要使用 isdigit,而是检查 scanf 是否返回 1。

关于c - isdigit() 函数没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29584635/

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