gpt4 book ai didi

c - 2 个 fget 一个接一个,第一个在第一次之后被跳过

转载 作者:行者123 更新时间:2023-11-30 21:35:22 24 4
gpt4 key购买 nike

printf("Give name: ");
fgets(name, 50, stdin);
printf("Give surname: ");
fgets(surname, 50, stdin);

所有这些都在循环中,并且在第一次之后,它会打印给出名称的命令,然后完全跳过它并打印给出姓氏的命令。该循环是一个无休止的 while (在我的代码中,它有一个带有中断的 out;并且它会在一段时间后结束):

while (1) {
printf("Give name : ");
fgets(name, 50, stdin);
printf("Give surname: ");
fgets(surname, 50, stdin);
printf("Give ID: ");
scanf("%d", &ID);
}

还有namesurname是数组。为什么它会跳过第一个名称之后的名称?

编辑:

你是对的。下面我有一个 scanf为他们ID号码并完全忘记使用 getchar摆脱\n特点。感谢您的快速回复。

最佳答案

贴出来的代码看上去没有什么大问题,但是还有问题:

  • scanf("%d", &ID); 的调用(您不检查是否成功)会在 stdin 中留下待处理的换行符。
  • 您没有测试fgets()的返回值。它在文件末尾返回NULL。如果你不打破的话,你会得到一个无限循环。
  • 在读取 fgets() 中的 stdin 之前,您的 C 库可能不会刷新输出。这可以解释这种行为。添加对 fflush(stdout); 的调用来修复此问题:

    for (;;) {
    printf("Give name : ");
    fflush(stdout);
    if (!fgets(name, 50, stdin))
    break;
    printf("Give surname: ");
    fflush(stdout);
    if (!fgets(surname, 50, stdin))
    break;
    printf("Give ID: ");
    fflush(stdout);
    if (scanf("%d", &ID) != 1)
    break;
    scanf("%*[^\n]"); /* consume extra characters on line, if any */
    scanf("%*c"); /* consume the linefeed */
    }

关于c - 2 个 fget 一个接一个,第一个在第一次之后被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com