簡體   English   中英

C:fgets跳過用戶輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM