使用isdigit猜测游戏程序

时间:2015-05-28 21:03:15

标签: c random nested-if

有人可以帮我在我的代码中找到错误吗?我对编程很陌生,我试图制作一个也使用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");
    }
}

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

1 个答案:

答案 0 :(得分: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()之前至少阅读手册页,就像例如this one

回到我十几岁的时候,我想成为一名程序员,我有一本关于使用计算机的书,里面有一本BASIC脚本,这是我一生中读过的第一个程序,之后我的父亲买了一台计算机用于工作,它有Windows 95,当然有MS DOS和Quick Basic,所以我开始使用它。

主要的信息来源是帮助,我不太了解那么多英语,但是阅读我学到的关于大多数功能的帮助,只需选择随机选择并阅读,然后通过猜测该功能可能从它的名称中做了什么,但即使在猜测之后,我仍然会阅读帮助。