Scanf在C中每隔一个时间循环跳过一次。

Scanf在C中每隔一个时间循环跳过一次。

我正在尝试开发一个简单的基于文本的挂人游戏,主游戏循环从提示开始,在每个字母上输入一个猜测,然后继续检查字母是否在单词中,如果不是,就会停止使用。然而,当我运行这个游戏时,每次都会出现两次提示,程序不会等待用户的输入。它也会带走生命(一次生命如果它是正确的输入,两次生命如果不是),所以它所接受的不是以前的输入。这是我的游戏循环,简化了一点:

while (!finished){
    printf("Guess the word '%s'\n",covered);

    scanf("%c", &currentGuess);

    i=0;
    while (i<=wordLength)
    {
        if (i == wordLength)
        {
            --numLives;
            printf("Number of lives: %i\n", numLives);
            break;
        } else if (currentGuess == secretWord[i]) {
            covered[i] = secretWord[i];
            secretWord[i] = '*';
            break;
        }
        ++i;
    }

    j=0;
    while (j<=wordLength)
    {
        if (j == (wordLength)) {
            finished = 1;
            printf("Congratulations! You guessed the word!\n");
            break;
        } else {
            if (covered[j] == '-') {
                break;
            }
        }
        ++j;

        if (numLives == 0) {
            finished = 1;
        }

    }}

我想问题是,如果它还没有接收到什么东西的话,它就会被吸收,但是我不知道为什么。有人知道吗?我在MacOSX10.5上使用GCC 4.0.1。


守着一只汪
浏览 571回答 3
3回答

猛跑小猪

纽琳。第一次遍历循环时,snf()读取字符。然后它读换行符。然后它读取下一个字符;重复。怎么修?我很少使用scanf(),但是如果使用格式字符串"%.1s",它应该跳过空白(包括换行符),然后读取非空白字符。但是,它需要的是一个字符数组,而不是一个字符:char&nbsp;ibuff[2];while&nbsp;((scanf("%.1s",&nbsp;ibuff)&nbsp;==&nbsp;1){ &nbsp;&nbsp;&nbsp;&nbsp;...}

慕盖茨4494581

将问题分解成更小的部分:int&nbsp;main(void)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;val; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("enter&nbsp;val:&nbsp;"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%c",&nbsp;&val); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("got:&nbsp;%d\n",&nbsp;val); &nbsp;&nbsp;&nbsp;&nbsp;}}这里的输出是:enter&nbsp;val:&nbsp;g got:&nbsp;103enter&nbsp;val:&nbsp;got:&nbsp;10为什么scanf再给你一个“10”?由于我们打印了ASCII值的ASCII编号,ASCII中的‘10’是“Enter”所以scanf还必须抓取“Enter”键作为字符。当然,看着你scanf字符串,您每次在循环中都请求一个字符。控制字符也被认为是字符,并将被拾取。例如,您可以在上面的循环中按下“ESC”然后“Enter”,然后获取:enter&nbsp;val:&nbsp;^[got:&nbsp;27enter&nbsp;val:&nbsp;got:&nbsp;10
打开App,查看更多内容
随时随地看视频慕课网APP