c - isDigit() 一直返回 0,即使它是数字,C 语言

标签 c

//Checks if it's an integer, other wise halt the program
    void checkInt(char s[]){
        int i;
        boolean boo = TRUE;
        fgets(s, sizeof(s), stdin);
        for (i = 0; i < strlen(s); ++i){
            printf("%d",isdigit(s[i]));
            if (!(isdigit(s[i]))){
                boo = FALSE;
                printf("Invalid input!\n");
                printf("CLOSING PROGRAM");
                exit(1);
            }
            printf("Cool");
        }  
    }


    int main()
    {
        int userInput;
        scanf("%d", &userInput);
        char buf[sizeof(int)*3+2];
        snprintf(buf, sizeof buf, "%d", userInput);
        checkInt(buf);
        return 0;
    }

我已经玩了一段时间了,我只是似乎不明白为什么当我在其中传递数字时,我的 isDigit 总是返回 0?我尝试使用在线 Iodeone.com,它按预期工作,但是当我使用编译我的老师希望我们使用的内容时,是数字突然不认识它们是数字

最佳答案

您的代码存在一些问题:

  1. 您初始化一个缓冲区以传递给 checkInt() ,但在 checkInt() 里面您可以通过调用 fgets() 覆盖该缓冲区来忽略该缓冲区中的内容。 ;

  2. 变量 scheckInt()实际上是一个指针,而不是一个数组,所以 sizeof(s)没有提供您想要的尺寸;

  3. fgets()覆盖传入 checkInt() 的数据可能只是读取 stdin 中留下的换行符通过scanf()流调用 - 因此缓冲区基本上被设置为相当于 "\n" 的字符串。这就是为什么 isdigit()调用永远不会看到数字。

关于c - isDigit() 一直返回 0,即使它是数字,C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26031870/

相关文章:

C 全局变量中的 C 横切关注点

c - 如何在 Visual Studio 代码中使用 C++ 安装库?

c - 在 UNIX 中使用 execve() 编写 ls 程序

java - 如何使用 JNI 将 double 和 unsigned int 从 native c 库返回到 java

c++ - 与 kill 一起发送到父线程的信号是否保证在下一条语句之前得到处理?

c++ - 如何从文件中读取编译器标志

c++ - getaddrinfo() 返回错误 "The requested name is valid, but no data of the requested type was found."

c - 符号扩展 1 位 2 的补数?

使用 Sublime Text 3 编译时出现 C 错误

c - 在 C fork 中, printf() 在 while() 循环之后不执行