C教程-----輸入輸出函數(shù)及控制流程語句(1)(2)

字號:

上面結果中的地址值在不同計算機上可能不同。
    例1.中第一條語句#include的含義是調用另一個文件stdio.h, 這
    是一個頭文件, 其中包括全部標準輸入輸出庫函數(shù)的數(shù)據(jù)類型定義和函數(shù)說明。
    Turbo C2.0對每個庫函數(shù)便用的變量及函數(shù)類型都已作了定義與說明, 放在相應
    頭文件"*.h"中, 用戶用到這些函數(shù)時必須要用#include<*.h>或#include"*. h"
    語句調用相應的頭文件, 以供連接。若沒有用此語句說明, 則連接時將會出現(xiàn)錯
    誤。
    二、scanf()函數(shù)
    scanf()函數(shù)是格式化輸入函數(shù), 它從標準輸入設備(鍵盤) 讀取輸入的信息。
    其調用格式為:
    scanf("<格式化字符串>", <地址表>);
    格式化字符串包括以下三類不同的字符;
    1. 格式化說明符: 格式化說明符與printf()函數(shù)中的格式說明符基本相同。
    2. 空白字符: 空白字符會使scanf()函數(shù)在讀操作中略去輸入中的一個或多
    個空白字符。
    3. 非空白字符: 一個非空白字符會使scanf()函數(shù)在讀入時剔除掉與這個非
    空白字符相同的字符。
    地址表是需要讀入的所有變量的地址, 而不是變量本身。這與printf()函數(shù)
    完全不同, 要特別注意。各個變量的地址之間同","分開。
    例2:
    main()
    {
    int i, j;
    printf("i, j=? ");
    scanf("%d, %d", &i, &j);
    }
    上例中的scanf()函數(shù)先讀一個整型數(shù), 然后把接著輸入的逗號剔除掉, 最
    后讀入另一個整型數(shù)。如果","這一特定字符沒有找到, scanf()函數(shù)就終止。若
    參數(shù)之間的分隔符為空格, 則參數(shù)之間必須輸入一個或多個空格。
    說明:
    (1). 對于字符串數(shù)組或字符串指針變量, 由于數(shù)組名和指針變量名本身就
    是地址, 因此使用scanf()函數(shù)時, 不需要在它們前面加上"&"操作符。
    例3
    mian()
    {
    char *p, str[20];
    scanf("%s", p); /*從健盤輸入字符串*/
    scanf("%s", str);
    printf("%s ", p); /*向屏幕輸出字符串*/
    printf("%s ", str);
    }
    (2). 可以在格式化字符串中的"%"各格式化規(guī)定符之間加入一個整數(shù), 表示
    任何讀操作中的位數(shù)。
    如例3中若規(guī)定只能輸入10字符給字符串指針p, 則第一條scanf() 函數(shù)語句
    變?yōu)?BR>    scanf("s", p);
    程序運行時一旦輸入字符個數(shù)大于10, p就不再繼續(xù)讀入, 而后面的一個讀
    入函數(shù)即scanf("%s", str)就會從第11個字符開始讀入。
    實際使用scanf()函數(shù)時存在一個問題, 下面舉例進行說明:
    當使用多個scanf()函數(shù)連續(xù)給多個字符變量輸入時, 例如:
    main()
    {
    char c1, c2;
    scanf("%c", &c1);
    scanf("%c", &c2);
    printf("c1 is %c, c2 is %c", c21, c2);
    }
    運行該程序, 輸入一個字符A后回車 (要完成輸入必須回車), 在執(zhí)行scanf
    ("%c", &c1)時, 給變量c1賦值"A", 但回車符仍然留在緩沖區(qū)內, 執(zhí)行輸入語句
    scanf("%c", &c2)時, 變量c2輸出的是一空行, 如果輸入AB后回車, 那么輸出結
    果為: c1 is A, c2 is B。
    要解決以上問題, 可以在輸入函數(shù)前加入清除函數(shù)fflush()( 這個函數(shù)的使
    用方法將在本節(jié)最后講述)。修改以上程序變成:
    #include
    main()
    {
    char c1, c2;
    scanf("%c", &c1);
    fflush(stdin);
    scanf("%c", &c2);
    printf("c1 is %c, c2 is %c", c1, c2);
    }