看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (VC++) 問題(Question):解決輸入類型與設定不符合的問題 餵入的資料(Input):假設只允許輸入數字0~100 預期的正確結果(Expected Output):0~100正確輸出 其餘重新輸入 程式碼(Code): #include<iostream> int main(void) { int i,t; while (1) { printf("key a number(0~100)\n"); t = scanf_s("%d", &i); getchar(); if (t == 0 || i > 100 || i < 0) continue; else break; } printf("%d\n", i); system("pause"); return 0; } 補充說明(Supplement): Q1 原本我自己寫時沒有加入getchar(); 可以解決輸入數字大於100和小於0的問題 但當我輸入的資料不是數字時就會形成死結 會不斷的跑printf("key a number(0~100)\n");這行程式碼,無法重新輸入資料 後來google以後發現有範例後面加入getchar(); 我加入以後就可以解決死結、無法重新輸入的問題 有點不太懂為什麼 前面t = scanf_s("%d", &i);若資料輸入類型不是整數t會等於0 if (t == 0 || i > 100 || i < 0)我在這行有寫t==0就重新執行 為何不加入getchar();會形成死結呢 Q2 還有就算我加入了getchar(); 若我輸入的字元大於1個然後按下Enter時(e.g. AA BBB ---) 雖然可以重新輸入 但是會跑出一個以上的printf("key a number(0~100)\n"); getchar();不是只會抓一個字元嗎 為何會跑出一個以上的printf("key a number(0~100)\n"); 很久沒有寫C了最近在練習 語感很差 書上資料又很陽春 麻煩替我解惑一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.134.192 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1425746988.A.BD2.html ※ 編輯: DivineAngel (114.27.134.192), 03/08/2015 00:51:20
dibery: scanf_s 遇到指示符 %d 時,會讀盡量多的字元來湊成數字 03/08 01:17
dibery: 因為你的輸入是字母,所以 scanf 永遠不會真的去讀那些輸入 03/08 01:18
dibery: 所以你輸入 AA 的話,就要等兩回 getchar 把它們吃光 03/08 01:18
dibery: 若是等於 0, 可以 scanf( "%*s" ) 吃掉那些怪怪的輸入 03/08 01:19
了解 用了scanf("%*s")後問題就簡單多了 感謝 ※ 編輯: DivineAngel (114.27.134.192), 03/08/2015 01:39:16