正在跳过scanf:如何让用户输入?

时间:2014-10-28 22:14:07

标签: char scanf

我最近不得不创建一个重新创建Monty Hall问题的程序。我必须要求用户在1到3之间选择一扇门。然后我随机选择哪个门有奖品。完成后,我向用户展示一扇没有奖品的门,此时他可以选择保留原来的门或改变它。这是我的问题发生的地方。下面的代码块(我的所有变量都已经初始化)是我要求用户保留原来的门或更改它。由于某些未知的原因,程序不会等待用户输入他的选择;相反,它会跳过scanf(“%c”,& choice)。我不知道这是怎么发生的,有人能够阐明这种错误吗?谢谢:))

int portes[] = {0,0,0};
        srand(time(0));
        winning_door= rand()%3;
        doors[winning_door] = 1;
        printf("\nChoose a door:\n");
        scanf("%d", &chosen_door);

        for(i = 0; i<3; i++)
        {
            if(doors[i] == 0 && i != (chosen_door-1))
            {
                printf("The door number %d is empty!\n", i+1);
                printf("\nWould you like to change doors? Enter 'y' for yes and 'n' for no.\n");
                scanf("%c", &choice);
                break;
            }
        }

在此代码中,scanf(“%c”,&amp; choice);被完全忽略,程序跳到下一部分!

1 个答案:

答案 0 :(得分:0)

问题是scanf的%c指令读取单个字符没有跳过空格。因此,在您的情况下,它将在第一个Choose a door问题/答案之后读取仍然挂在输入上的换行符。您可以使用%1s来读取单个非空白字符(并忽略所有空格),这将跳过剩余的换行符和用户可能输入的任何空格,返回它们输入的第一个“真实”字符。但是,如果这样做,则需要将choice声明为两个字符(char choice[2])的数组,因为scanf将在读取单个字符后写入一个NULL字节。

或者,您可以在%c之前为格式添加空格(因此它将是scanf(" %c", &choice)),它会明确地跳过所有空格字符。