scanf()


1、&是取地址符號

&+變量名表示該變量的地址,將從用戶輸入端獲得的數據存儲到該變量的地址中

2、輸入機制

%f、%lf、%d以“空白字符”為間割,空白字符有空格、制表符(\t)、回車符,遇到空白字符停止讀取

%c沒有間隔,逐字符讀取

實驗一:

#include <stdio.h>
int main()
{
    int a;
    printf("請輸入:");
    scanf("%d", &a);//輸入100 200,實際只讀取了100
    printf("%d\n", a);
    printf("%d\n", a);

    return 0;
}

 

注意不能定義兩個變量,結果為:

實驗二:

#include <stdio.h>
int main()
{
    char a;
    printf("請輸入:");
    scanf("%c", &a);  //輸入100,實際只讀了字符‘1’
    printf("%c\n",a);
    printf("%c\n", a);
    printf("%d\n", a);  //輸出49,字符‘1’的ASCII碼值為49

    return 0;
}

結果為:

實驗三:

%c不會把空格跳過去

#include <stdio.h>
int main()
{
    char a;
    scanf("%c", &a);//輸入空格+100
    printf("a=%c!", a);

    return 0;
}

結果是:

實驗四:

#include <stdio.h>
int main()
{
    int a;
    int b;
    printf("請輸入:");
    //輸入100 200 300,摁下回車
    //輸入緩沖區:100 200 300 回車符
    scanf("%d", &a);
    //輸入緩沖區:200 300 回車符
    scanf("%d", &b);
    //輸入緩沖區:300 回車符
    printf("%d\n", a);
    printf("%d\n", b);

    return 0;
}

兩個scanf時,必須定義兩個變量,結果是:

實驗三代碼可以優化成:

#include <stdio.h>
int main()
{
    int a;
    int b;
    printf("請輸入:");
    scanf("%d%d", &a, &b);
    printf("a=%d,b=%d\n", a, b);

    return 0;
}

應當注意scanf中的兩個%d之間最好不要加任何符號,否則輸入端要以中間的那個符號作為間隔,輸入端如果沒有該符號,就會出現問題

3、定義一個scanf()函數的返回值

當所定義的數據類型與用戶輸入的數據類型不相符時,就會出現問題,輸出的結果不是預期的結果,這時可以定義一個變量來表示成功讀取數據的個數

實驗五:

#include <stdio.h>
int main()
{
    int a;
    int b;
    int c;
    int ret;
    printf("請輸入:");
    ret=scanf("%d%d%d", &a,&b,&c);
    printf("a=%d b=%d c=%d\n", a,b,c);
    printf("ret=%d\n", ret);

    return 0;
}

當中間的一個數據讀取不成功時,后面的數據都不能成功讀取

實驗六:(代碼同實驗五)

4、double類型的輸入

輸入double類型的值必須用%lf,不能用%f,否則輸入失敗

輸出double類型變量的值可以用%lf,也可以用%f,沒有區別

 


免責聲明!

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



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