0

我有这个功能,但是我的 fgets 功能不能正常工作,谁能帮帮我?在案例 3 中,我要求用户输入他想要搜索酒店的内容,例如部分单词、两个单词等。当我运行它时它无法正常工作,我不明白为什么。

        scanf("%d", &option);


        case 3:
            printf("\nEnter the name of the hotel you want to search for.\n\n>>>");
            fgets(asked_hotel, sizeof(asked_hotel)-1, stdin);

            printf("The hotels matching what you searched are:\n\n");
            find_hotel(hotel_name,hotel_rating,address_name,city_name,address_code,NUM_HOTELS,asked_hotel);
4

2 回答 2

3

这里的问题是您使用scanf来获取选项。它提取数字,但将换行符留在缓冲区中。这意味着当您下次调用fgets时,它将读取该换行符并且您将得到一个空行。

最简单的解决方案是要求scanf跳过尾随空格,包括换行符。这是通过在格式代码后添加一个空格来完成的:

scanf("%d ", &option);
/*       ^         */
/*       |         */
/* Note space here */
于 2013-07-10T10:53:37.850 回答
0

建议将所有scanf()呼叫更改为fgets()/sscanf()对。例子:

scanf("%d", &option);

char buf[80];
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &option);
于 2013-07-10T14:17:53.960 回答