1
我試圖使用fgets從命令行獲取用戶輸入。代碼片段是允許用戶將新節點添加到單個鏈接列表的功能的一部分。正如你從我的代碼中看到的那樣,我使用while循環來請求用戶的輸入(以便他/她可以添加多個節點)。當我運行這個程序時,第一次一切都很好。但是,當我嘗試添加第二個節點時,程序將跳過名字字段的輸入請求。在我的命令行中,我得到的第一個名字:姓:C:fgets跳過用戶輸入
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;
}
}
我已經看了看計算器和其他網站,但沖洗stdin和stdout不爲我做的伎倆類似的問題。我的緩衝區也沒有分配更多的空間。有什麼建議麼?謝謝!
爲什麼'fflush(stdin)'?這不是未定義的行爲,至少在大多數平臺上? –
不要使用'fflush(stdin);'如果你沒有使用微軟編譯器 –
[爲什麼fgets沒有輸入第一個值?](http://stackoverflow.com/questions/20092468/why-fgets-是不是輸入的第一個值) – Barmar