为什么我的程序会跳过第一个fgets()?

时间:2015-03-15 05:26:36

标签: c string-parsing

这是选择:

printf("\t1. Add new book record");
printf("\n");
printf("\t2. Edit book title");
printf("\n");
printf("\t3. View all the books");
printf("\n");
printf("\t4. View a specific book");
printf("\n");
printf("\t5. Delete a book");
printf("\n");

printf("Your choice:\t");
scanf("%d", &ch);
printf("\n");

之后根据用户的输入进入另一个功能。除了添加新书记录外,其他一切工作正常。该程序跳过第一个fgets(),其中要求用户输入书的编号,而是直接转到第二个fgets(),它可以正常工作。

以下是获取信息的代码:

void getInfo(BOOK *data)
{
    printf("Enter Book Number: ");
    fgets((*data).bkNum,M, stdin);
    printf("Enter Book Title: ");
    fgets((*data).bkTitle, M, stdin);
    printf("Enter Book Author: ");
    fgets((*data).bkAuthor, M, stdin);
    printf("Enter Book Copyright: ");
    scanf("%d", &(*data).bkCopyright);
    return;
}

1 个答案:

答案 0 :(得分:2)

您的scanf调用会在输入缓冲区中留下换行符,然后由第一个fgets调用消耗掉。在致电fgets之前,您需要吃掉那个角色。