【C】getchar()在C程序中的妙用!


  getchar()在C程序中的功能是接收一個字符,當我們在連續輸入字符的時候getchar()會給你意想不到的效果。下面是net小伙做的一些測試:

首先看下面的這個程序:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main(void)
 4 {
 5     int a,b,c;
 6     printf("please input num a:\n");
 7     scanf("%d",&a);
 8     printf("please input num b:\n");
 9     scanf("%d",&b);
10     printf("please input num c:\n");
11     scanf("%d",&c);
12     printf("%d,%d,%d",a,b,c);
13 }

運行結果可想而知:

那么把int改成char之后會是神馬結果呢?來看下一段代碼:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main(void)
 4 {
 5     char a,b,c;
 6     printf("please input num a:\n");
 7     scanf("%c",&a);
 8     printf("please input num b:\n");
 9     scanf("%c",&b);
10     printf("please input num c:\n");
11     scanf("%c",&c);
12     printf("%c,%c,%c",a,b,c);
13 }

你能猜到運行結果是什么嗎?

為什么會顯示這樣的結果?你猜到是什么原因了嗎?

我們再來看一下源代碼:程序連續接收了三個字符,在C中enter鍵代表一個換行符,所以當輸入完a的值‘q’之后按下enter鍵,換行符立馬被字符b接收了,然后程序再向下走,輸入c的值‘w’。結果就會按順序顯示a,b,c的值,我們已經知道a='q',b='\n',c='w';所以結果就會顯示兩行。

如果我們加入getchar()會有什么結果呢?

我們再來看一下改進的程序:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main(void)
 4 {
 5     char a,b,c;
 6     printf("please input num a:\n");
 7     scanf("%c",&a);
 8     getchar();
 9     printf("please input num b:\n");
10     scanf("%c",&b);
11     getchar();
12     printf("please input num c:\n");
13     scanf("%c",&c);
14     printf("%c,%c,%c",a,b,c);
15 }

顯示結果如下:

現在為什么會正常顯示我們想要的結果呢?原因就是getchar()把enter鍵所表示的字符接收了,所以就會達到想要的效果了。

到現在你應該明白為什么會出現這種情況了吧!無非就是輸入的規范問題,如果我們運行第二個程序,用另一種方法輸入看看會是神馬效果:

看到沒?也可以獲取想要的結果,但是程序並不是這么美觀了,為什么會出現這種效果呢?

因為編譯器規定輸入的時候並不是立即回顯,而是存到一個緩沖區里面。當遇到換行字符會釋放緩沖區的數據,並清空緩沖區。

scanf()在讀取數字時會跳過空格、制表符和換行符!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM