使用fgets在C中获取一行

时间:2013-07-10 10:46:12

标签: c string fgets

我有这个功能,但我的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);

2 个答案:

答案 0 :(得分:3)

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

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

scanf("%d ", &option);
/*       ^         */
/*       |         */
/* Note space here */

答案 1 :(得分:0)

建议将所有scanf()次来电更改为fgets() / sscanf()对。例如:

scanf("%d", &option);

char buf[80];
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &option);