如標題,scanf是一個「動態輸入」的函數,你可以先宣告一個變數a,再用scanf輸入,賦予它任意值,每次執行程式都可以輸入不同的值給變數a
scanf可以用來輸入字元
、數字
、字串
…等,格式為: scanf(“形式”, &變數名稱1);
但用scanf連續輸入時,會出現自動結束的問題
假設我們有一程式碼長這樣:
int main() {
int a;
char ch;
printf("請輸入一個整數:");
scanf("%d", &a);
printf("請輸入一個字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
輸入完20這個整數,並按enter
,它就會自動結束,可是我們還有字元c1
還沒輸入R!!
因為你輸入完整數20,按下的那個enter(回車)
被留在緩衝區,以至於被下一個scanf吸收了,所以c1印出來會是空白的
那有沒有什麼方法能解決這件事呢?有!以下有三種解決方法供各位參考
Ex 1:
在第二個scanf裡的%c
前面加上「空格」,來抵銷前面按的enter(回車)
int main() {
int a;
char ch;
printf("請輸入一個整數:");
scanf("%d", &a);
printf("請輸入一個字元:");
/* 在%c前面加上一個空格 */
scanf(" %c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
這樣就可以成功輸入整數a和字元c1囉!
Ex 2:
在第一個scanf後加上ffluch()
,清空緩衝區內的資料,這樣第二個scanf就不會吸收到enter(回車)
了
int main() {
int a;
char ch;
printf("請輸入一個整數:");
scanf("%d", &a);
/* 清空緩衝區內的資料 */
fflush(stdin);
printf("請輸入一個字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
這樣也可以成功輸入整數a和字元c1
Ex 3:
你如果不想用fflush()
清空緩衝區,你也可以用getchar()
去吸收enter(回車)
這個字元
int main() {
int a;
char ch;
printf("請輸入一個整數:");
scanf("%d", &a);
/* 吸收空格這個字元 */
getchar();
printf("請輸入一個字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
結果會和使用fllush()
一樣:
以上三種解決方法,不僅適用enter(回車)
,也適用於「空格
」喔!
現在我們使用Ex 1.的方式,將整數a
和字元ch
放在一起輸入,並在輸入時用「空格」將a
和ch
隔開:
int main() {
int a;
char ch;
printf("請輸入一個整數和字元:");
scanf("%d %c", &a, &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
這樣也可以成功輸入整數a和字元c1喔!
以上就是今天的介紹