gpt4 book ai didi

C 第一个 fgets() 在第二个运行时被跳过

转载 作者:行者123 更新时间:2023-11-30 18:30:30 26 4
gpt4 key购买 nike

问题是:

为什么第一个 fgets 语句被跳过?我在某处读到这可能是因为我之前使用过 SCANF() 。我试图弄清楚,但我做不到。有人可以给我解决方案吗(我可能应该重新编写第一段代码以避免 scanf,但是怎么做?)。

这在我正在努力解决的代码中:

for(;;)
{
//Ask if the user wants to add another CD - Y/N
fputs("\nWould you like to enter new CDs details? y or n\n", stdout);
scanf(" %c" ,&type);
if (toupper(type) != 'Y')
break;

puts("");


//getting in the album information
printf("\tLets enter the details of the CD %d:\n\n", count + 1);


fputs("Title?\n", stdout);

//this fgets statement is being skipped
fgets(title[count], sizeof title[count], stdin);
title[count][strlen(title[count]) - 1] = '\0';

fputs("Atrist? \n", stdout);
fgets(artist[count], sizeof artist[count], stdin);
artist[count][strlen(artist[count]) - 1] = '\0';
}

最佳答案

这是因为最后一次按 ENTER 按键会导致在输入缓冲区中留下一个换行符。这是由第一个 fgets() 获取的。

您可以在第一个 fegts() 之前添加 while(getchar() != '\n'); 来避免这种情况。

[编辑: 或者,为了更好,正如 Chux 所提到的,感谢他 在下面的评论中,使用类似的内容

int ch; while((ch = getchar()) != '\n' && ch != EOF);

处理“换行符”以及EOF。]

也就是说,混合使用 scanf()fgets() 从来都不是一个好的选择。始终使用fgets(),这是可能的,而且更好。

关于C 第一个 fgets() 在第二个运行时被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707114/

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