1

有人可以帮我在这里找到我的代码中的错误吗?我对编程完全陌生,我正在尝试制作一个简单的猜谜游戏,它也使用isdigit().

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

main()
{
    int iRandom = 0;
    int iGuess = 0;
    srand(time(NULL));

    iRandom = rand()%10 + 1;

    printf("\nPlease guess a number between 1 and 10: ");
    scanf("%d", &iGuess);

    if (isdigit(iGuess)){
        if(iGuess == iRandom){
            printf("\nYou guessed the correct number!\n");
        }    
        else{
            printf("\nThat wasn't the correct number!\n");
            printf("\nThe correct number was %d\n", iRandom);
        }
    }
    else{ 
        printf("\nYou did not guess a number.\n");
    }
}

问题是,无论我是否输入数字,程序都会返回“您没有猜到数字”。运行 gcc 编译器也不会产生任何我能看到的明显错误。如果我的嵌套if语句搞砸了,有人可以解释为什么,如果isdigit(iGuess)被评估为真,它仍然会运行该else部分吗?

4

1 回答 1

4

您使用isdigit()错误,它用于确定 ascii 值是否为数字,您正在读取数字,因此您不需要isdigit().

要使用实际输入的数字,您需要检查 的返回值scanf(),例如

if (scanf("%d", &iGuess) == 1)
 {
    if(iGuess == iRandom)
        printf("\nYou guessed the correct number!\n");
    else 
     {
        printf("\nThat wasn't the correct number!\n");
        printf("\nThe correct number was %d\n", iRandom);
     }
  }
else
 { 
    printf("\nYou did not INPUT a number.\n");
 }

scanf()在书中看到使用错误的方式,即忽略它的返回值,以及其他库函数,我建议在开始使用之前至少阅读手册页scanf(),例如这个

小时候想当程序员的时候,我有一本关于使用电脑的书,里面有一个BASIC脚本,这是我一生中读的第一个程序,之后我父亲买了一个工作用的电脑有 Windows 95,当然还有 MS DOS 和 Quick Basic,所以我开始使用它。

信息的主要来源是帮助,我不懂那么多英语,但是阅读帮助我了解了大多数功能,只是随机选择一个阅读,然后通过它的名称猜测该功能可能做了什么,但即使在猜测之后,我仍然阅读了帮助。

于 2015-05-28T21:04:51.720 回答