gpt4 book ai didi

c - 数字验证 - 无限循环

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

我有这段代码来验证用户输入。条件:输入的值只能是零或正数。不接受负值和字母字符。

这是我的代码,它一直在循环:

#include <stdio.h>

int main ()
{
int a, b, c, d;

printf ("enter value for a:");
do {
b = 0;
scanf ("%d", &a);
if (!isdigit(a)) {
printf("Number must be numeric!:\n");
b++;
}
else if (a < 0) {
printf ("number must be postive\n");
b++;
} else {
printf("\neverything is goood\n");
}
} while (b != 0);
}

最佳答案

isdigit() 需要一个 ASCII 编码的字符,但是带有 %d 参数的 scanf 正在转换一个 ASCII 编码的数字(一个字符串) 转换为实际数字。

即。如果您输入 '1',ASCII 码为 0x31scanf("%d",... 会将其转换为值 1。1 的 ASCII 码不是数字。

要解决这个问题,要么:

  • 使a类型为char并使用scanf格式说明符%c,然后isdigit( ) 会做你想做的事。
  • 使用 strtol 读取多个字符并使用 char **endptr 参数执行您自己的错误检查。

此外,您应该打开编译器警告并包含包含 isdigit() 函数的头文件 ctype.h

关于c - 数字验证 - 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488681/

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