#include<stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
scanf("%c",&b);
printf("%c,%c",a,b);
}
一段看上去很簡單的代碼,即使是C語言初學者也能看懂,
可是在運行的時候卻出現了問題:
①輸入a后按下回車
②用空格隔開之后再按下回車
相信和我一樣的大部分初學者,看著自己天衣無縫的代碼,百思不得其解,
讓我們先來看看,在百度百科中,對于scanf函式的解釋
在①中,我們只輸入了a和回車,而這時,回車便留在了緩沖區中,直接被下一個scanf所吸收,在②中,輸入了a、空格、b和回車,在這種情況下,我們輸入的空格則進入了緩沖區中,導致b無法被讀取,導致出現了問題,
解決方法
①在第二個%c前加上空格,來抵消之前輸入的空格/回車
#include<stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
scanf(" %c",&b); //在%c前加上一個空格
printf("%c,%c",a,b);
}
②在第一個%c后面加上一個*c,忽略下一個讀入的字符
#include<stdio.h>
int main()
{
char a,b;
scanf("%c*c",&a);
scanf("%c",&b);
printf("%c,%c",a,b);
}
③用fflush清慷訓沖區
#include<stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
fflush(stdin);
scanf("%c",&b);
printf("%c,%c",a,b);
}
④用getchar吸收字符
#include<stdio.h>
int main()
{
char a,b;
scanf("%c",&a);
getchar();
scanf("%c",&b);
printf("%c,%c",a,b);
}
除方法①以外,其他三種方法不僅在使用scanf時有效,在使用getchar碰到類似問題的時候也有效,有興趣的讀者可以自行嘗試,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/241349.html
標籤:其他
上一篇:html(css、js、html、web)檔案參考路徑寫法【flask】
下一篇:原生js實作圖片懶加載
