簡體   English   中英

如何使具有多個輸入的scanf()忽略其他輸入?

[英]How can I make scanf() with multiple inputs ignore the others?

scanf("%s %d %s %d",word1,&num1,word2,&num2);

因此,當用戶輸入“退出”時,它應該停止要求其他3個輸入。 但是它要求我輸入另一個“退出”,可能是因為格式中有2%s

有沒有辦法解決? 編輯:因為它必須循環獲得4個輸入,除非輸入了退出。

scanf是一個非常鈍的工具,不善於與非結構化輸入(包括人:-)進行對話。 通常,如果您正在與人互動,則應從fgets開始閱讀一行,然后將所得行分開,但是最方便,可能包括sscanf

這比您想象的要糟糕,因為如果您將%d指令提供為不可掃描的整數,它將導致阻塞。 例如,如果您輸入quit now ,則第一個%s指令將讀取單詞quit%d now將留在輸入流中,導致scanf返回1(一次成功的轉換和分配)。 下次讀取字符串的嘗試將獲取並消耗now ; 對於幼稚的代碼,這似乎是第二行,而不是第一行的延續。

#include <stdio.h>
#include <string.h>

scanf("%s ", word1);
if (strcmp(word1, "quit") != 0)
    scanf("%d %s %d", &num1, word2, &num2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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