嵌入式學(xué)習(xí)筆記(2)--scanf使用常見問題及解決方法
在學(xué)習(xí)C語言的時(shí)候,printf()是我們學(xué)到的第一個(gè)函數(shù),相信“hello world”這個(gè)例子大家都不會(huì)陌生吧,接著就是scanf()這個(gè)函數(shù)了,這個(gè)函數(shù)的功能是格式輸入,它的函數(shù)原型是:
int scanf(cONST char *format,…);
這個(gè)函數(shù)的基本用法這里就不說了,這里介紹一些這個(gè)函數(shù)使用中常見的問題及解決方法:
第一,連續(xù)輸入兩個(gè)或多個(gè)字符的時(shí)候,第二次輸入直接跳過了如:
int main()
{
char a,b;
scanf(“%c”,&a);
scanf(“%c”,&b);
return 0;
}
輸入 a回車 然后就退出了。
這個(gè)問題有很多說法有說是緩沖區(qū)沒有清除,有說stdin這個(gè)流的問題,這里我們不去追究,這里介紹幾個(gè)解決這種問題的方法:
int main()
{
char a,b;
scanf(“n%c”,&a);
scanf(“n%c”,&b);或 scanf(“ %c”,&b);%c前有空格
return 0;
}
這次再編譯一下就沒有問題了。
第二,使用scanf()函數(shù)輸入一句話的時(shí)候,如:
int main()
{
char string[50] ;
scanf(“%s”,string);
printf(“%sn”,string);
return 0;
}
輸入:hello world!
結(jié)果:hello
顯然這個(gè)結(jié)果沒有達(dá)到我們的要求。
解決方法:
int main()
{
char string[50] ;
scanf(“%[^n]”,string);
printf(“%sn”,string);
return 0;
}
重新編譯一下,沒有問題了吧!
這里如果要是連續(xù)輸入多個(gè)語句的話也會(huì)出現(xiàn)連續(xù)輸入字符的那種問題,當(dāng)然解決方法也相同了。
這里是最常見的幾個(gè)問題,可能還有其他的解決方法,希望和大家相互交流,能力有限有問題希望大家多多指教。