C語言之scarf函數


一 基本用法

 

 scanf函數:接收用戶的輸入

     語法:

       scanf("格式化控制符",地址列表);

 

     例:

        int num;

       scanf("%d",&num);//代表接收用戶輸入一個整數,把這個整數賦值到num所在的空間

 

     如果要接收字符呢???

        char ch;

        scanf("%c",&ch);

 

 tips:千萬要記住:scanf的格式化控制符后面不要加\n

 

 scanf函數有一個特點:它叫阻塞式函數

 

    意思就是:當程序執行到它這一句的時候,會暫時停止,不會繼續往下執行,直到用戶輸入完才會繼續往下執行

 

二 詳解

盡量在讓用戶輸入給一個提示

     printf補充:可以同時挖N個坑(同時在內存中開辟N個空間),但是你給的值的順序必須一致,而且類型也必須一致

 

 

 1、也可以同時輸入兩個整數,分別輸入兩次就行了,或者用空格隔開

 2、scanf里面的格式化控制符也可以用其他符號隔開,但是不管你用什么格式,輸入的時候必須以你的那個格式來輸入,否則會輸入異常

 3、最好不要先接收輸入任何一個類型的數據后,立即再接收輸入一個字符

 4、最好不要把字符型和其他類型放在一起輸入(tips:為什么呢?請看下面的運行原理)

 

三 運行原理

首先,scanf在內存中有個位置,叫緩沖區,里面是保存所有用戶輸入的數據的

 

用scanf接收用戶輸入的時候:

1.先去緩沖區里面找有沒有合適的數據,如果有,則直接把緩沖區的這個數據賦值給你的變量(意味着不要用戶輸入了)

2.如果沒有,才會讓用戶進行輸入,輸入以后,數據先放在緩沖區

3.然后再從這個緩沖區里面找數據

tips:如果要接收的是數字,但是輸入的是字符,那么會忽略(不給那個變量賦值)

以后如果要接收一個字符的話,一定要記得在前面加空格(tips:會過濾掉所有的空格和回車)

 

tips:代碼例子如下

 

#include <stdio.h>

int main(int argc, const char * argv[]) {

   

    /*

     int num1;

     scanf("%d",&num1);

    

     char ch;

     scanf("%c",&ch);

    

     printf("num1=%d   ch=%c\n",num1,ch);

     */

   

    /*

     int num;

     char ch;

    

     scanf("%d%c",&num,&ch);//會讓用戶輸入,依次輸入200空格a回車

    

     printf("num=%d   ch=%c\n",num,ch);//num=200 a=空格

    

     char ch2;

     scanf("%c",&ch2);//不會讓用戶輸入

     printf("ch2=%c\n",ch2);//ch2里保存的是a

    

     char ch3;

     scanf("%c",&ch3);//不會讓用戶輸入

     printf("ch3=%c\n",ch3);//ch3里面保存的是回車

     */

 

    /*

     char ch;

     scanf("%c",&ch);//輸入完以后a,a,2,0

    

     int num;

     scanf("%d",&num);//這里還會讓我繼續輸入,因為上面緩沖區留下來的\n和int類型不符合,所以會讓我輸入

    

     printf("ch=%c   num=%d\n",ch,num);

     */

   

    //    int num = 200;

    //    scanf("%d",&num);//如果輸入的是字母,直接忽略

    //

    //    printf("num=%d\n",num);

   

    /*

     char ch;

     scanf("%c",&ch); //aa20

    

     int num = 200;

     scanf("%d",&num);

    

     char ch2;

     scanf("%c",&ch2);

    

     printf("ch=%c   num=%d  ch2=%c\n",ch,num,ch2);//a  200  a

     */

   

    /*

     int num;

     scanf("%d",&num);

    

     char ch;

     scanf("%c",&ch);//如果接收字符的話,很容易吸收掉上一次輸入的空格或者回車,那么要解決這個問題怎么辦???

    

     printf("num=%d   ch=%c\n",num,ch);

     */

   

    //解決辦法一:

    /*

     int num;

     scanf("%d",&num);

    

     char temp;

     scanf("%c",&temp);//幫我們吸收掉回車了

    

     char ch;

     scanf("%c",&ch);//如果接收字符的話,很容易吸收掉上一次輸入的空格或者回車,那么要解決這個問題怎么辦???

    

     printf("num=%d   ch=%c\n",num,ch);

     */

   

    //解決辦法二

    //    int num;

    //    scanf("%d",&num);

    //

    //    char ch;

    //    scanf(" %c",&ch);//會自動過濾掉所有的空格和回車

    //

    //    printf("num=%d   ch=%c\n",num,ch);

   

     //解決辦法三(推薦方法)

    //    int num;

    //    scanf("%d",&num);

//

//    rewind(stdin); //自動幫助我們清空緩沖區的數據

    //    char ch;

    //    scanf("%c",&ch);

    //

    //    printf("num=%d   ch=%c\n",num,ch);

 

   

    return 0;

}

 


免責聲明!

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



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