[英]C: fgets skips user input
我正在嘗試使用fgets從命令行獲取用戶輸入。 該代碼段是功能的一部分,該功能允許用戶將新節點添加到單鏈接列表中。 從代碼中可以看到,我使用while循環來不斷請求用戶輸入(以便他/她可以添加多個節點)。 當我運行程序時,第一次一切都很好。 但是,當我嘗試添加第二個節點時,該程序會跳過對名字字段的輸入請求。 在命令行中,我得到名字:姓氏:
while (go)
{
char first_name[256];
char last_name[256];
char telephone[256];
char address[256];
printf("First name: ");
fflush(stdout);
fgets(first_name, sizeof(first_name), stdin);
//scanf("%s", &first_name);
fflush(stdin);
printf("Last name: ");
fflush(stdout);
fgets(last_name, sizeof(last_name), stdin);
fflush(stdin);
//scanf("%s", &last_name);
printf("Address: ");
fflush(stdout);
fgets(address, sizeof(address), stdin);
fflush(stdin);
//scanf("%s", &address);
printf("Telephone: ");
fflush(stdout);
fgets(telephone, sizeof(telephone), stdin);
fflush(stdin);
//scanf("%s", &telephone);
if (!search_by_all(first_name, last_name, address, telephone))
{
add_entry(first_name, last_name, address, telephone);
printf("Success adding entry! Add another entry? 1 for yes, 0 for no.\n");
scanf("%d", &go);
fflush(stdin);
fflush(stdout);
}
else
{
printf("Error adding entry. Quitting...\n");
break;
}
}
我在stackoverflow和其他站點上也曾研究過類似的問題,但是刷新stdin和stdout並不能解決我的問題。 也不在緩沖區中分配更多空間。 有什么建議么? 謝謝!
混合scanf()
和fgets()
是有問題的。
建議所有fgets()
並檢查結果。
// scanf("%d", &go);
char buf[sizeof(go)*3 + 3];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
if (sscanf(buf, "%d", &go) != 1) Handle_BadInput;
scanf()
的典型用法是將Enter或'\\n'
留在stdin
。 隨后對fgets()
調用僅返回"\\n"
。
注意:確信所有fflush(stdin);
可能會被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.