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

标签 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;
}

最佳答案

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

关于c - 为什么我的程序跳过第一个 fgets()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057542/

相关文章:

c - 如何在 C 中使错误的指针算术更加明显?

java - 如何在不知道实际模式的情况下检查字符串中的重复模式?

java - String to float/double 解析

python - 用于查找文件内容中所有出现的 'NSLocalizedString' 的正则表达式

c - 如何将短整数视为 C 中的元素数组?

c - MSVS 命令行参数

c# - 使用 C# 和 Unity 的字符串读取和解析性能

c++ - 如何解析来自 EDID 的数字数据

c - 在 C 中返回特定数量的小数

c - 这里有一个非常奇怪的错误 : dereferencing pointer to incomplete type