在筆試中,經常見到字符的讀入與輸出的題目。逆序打印輸入時最常見、最基本的考題,復雜點的就是統計單詞、逆序打印單詞之類的。難點是如何判斷輸入的結束,如果用getchar函數,其輸入結束符為EOF(其打印值為-1),c=getchar(); //c的類型為Int型,因為EOF==-1,那么scanf函數的使用方法呢?
#include<stdio.h>
int main()
{
?????? int i;
?????? char ch;
?????? for(i=0;i<=3;i++)
?????? {
????????????? printf("%d ---- ",i);
????????????? scanf("%c", &ch);
????????????? printf("/n");
?????? }
??????? return 0;
}
運行結果:
0 ---- a
1 ----
2 ---- b
3 ----
產生其原因在于:
因為 scanf %c 只是讀入一個字符,而你在輸入時實際上輸入的是:某個字符
+Enter,Enter 產生的/n 也會停留在輸入緩沖區中,下次調用 scanf %c 時就會直接讀到
它而不是等待你再次輸入!同理,getchar()也有類似的行為。所以我們才不提倡使用
scanf("%c", ...),尤其是把它在循環中。
解決的方法:
(1)、將 scanf("%c", &ch); 修改為:
??????? scanf(" %c", &ch);?? /*在%前加上一個空格*/
(2)、將 scanf("%c", &ch); 修改為:
??????? scanf("%c%*c", &ch);
?