我需要能夠檢測到無關的輸入並退出我的程序。scanf只有一個字符
如果我在scanf("%c", &var);
中輸入一個多於一個字符的字符串,它會取第一個字母並將其存儲到var中,但程序會繼續。
我試着用if (scanf("%c", &var) != 1)
,但是它每次都返回1,不管輸入那麼它沒什麼區別。我知道像fgets()這樣的其他函數可能更適合這個,但我被指示使用scanf()函數。
我該怎麼做?
我需要能夠檢測到無關的輸入並退出我的程序。scanf只有一個字符
如果我在scanf("%c", &var);
中輸入一個多於一個字符的字符串,它會取第一個字母並將其存儲到var中,但程序會繼續。
我試着用if (scanf("%c", &var) != 1)
,但是它每次都返回1,不管輸入那麼它沒什麼區別。我知道像fgets()這樣的其他函數可能更適合這個,但我被指示使用scanf()函數。
我該怎麼做?
如果你只是不想你的程序等待鍵入 「CONIO.H」
c = getch();
OR
在scanf(「%定義的字符,使用的getch()後進入c「,& var);您可以在%c之後添加換行符\ n以吸收多餘的字符。
scanf("%c\n",&in);
'getch()'不是**標準函數。它在MS-DOS'conio.h'和Unix nCurses庫中有兩個不同的版本。 – iBug
是的,主要目標是解決這個問題,我給了我兩種方法。我沒有看到這個問題! @iBug –
當讀取用戶輸入時,scanf可以從文件或控制檯獲取其輸入。
從控制檯讀取數據時,只有在添加換行符時數據纔可用於程序。這意味着任何在同一行輸入的內容都被讀取。
想象我有一個迷宮程序,並要我選擇哪個方向走....
while(!atGoalLocation()) {
printf("Which direction (f)orward (l)eft (r)ight?\n");
scanf("%c", &dir);
processDirection(dir);
}
我既可以通過迷宮進入路線爲
f
l
f
r
f
f
或者它也可能是正確的,進入我的輸入作爲
flfrff
根據您的任務,他們可能意味着同樣的事情。
如果您想要允許這些輸入中的任何一個,請確保通過向scanf添加「」來吃掉空白區域。
if(scanf(" %c", &dir) == 1)
如果斷行版本是要接受的唯一方法,那麼你應該分開的線,然後嘗試進行掃描。
char line[200];
while(fgets(line, sizeof(line), stdin) != NULL){
sscanf(line, "%c", &dir);
也爲C++,我們應該使用std::cin
和std::cout
。然而,同一行上的未讀字符會出現同樣的複雜情況,所以我仍然會使用基於行的解析器。
std::string line;
while(std::getline(std::cin, line)){
// here we could parse the line using std::strstream to decode more complext things than a char.
dir = line[0];
'如果(scanf函數( 「%C%C」,與VAR,及額外的)== 2 &&額外的!= '\ n')' – BLUEPIXY
注意,你通常要至少經過一個換行符輸入的字符通常更多(除非字符是換行符)。你需要決定並解釋你想要做更準確的事情。以前輸入了什麼?角色後面輸入了什麼?你確定你應該擔心嗎? (最後一個答案可能是'是',但你需要小心你允許和禁止的內容。) –
還要注意,一般情況下,你不應該用C和C++標記問題。選擇你正在學習的語言,不要用另一個標記問題。 –