程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言基礎教程(三)輸入輸出函數及控制流程語句(4)

C語言基礎教程(三)輸入輸出函數及控制流程語句(4)

編輯:關於C語言
二、scanf()函數
scanf()函數是格式化輸入函數,它從標准輸入設備(鍵盤)讀取輸入的信息。其調用格式為:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三類不同的字符;
1. 格式化說明符:格式化說明符與printf()函數中的格式說明符基本相同。
2. 空白字符: 空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符。
3. 非空白字符: 一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。
地址表是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數完全不同,要特別注意。各個變量的地址之間同","分開。
例2:
main()
{
int i, j;
printf("i, j=?\n");
scanf("%d, %d", &i, &j);
}
上例中的scanf()函數先讀一個整型數,然後把接著輸入的逗號剔除掉,最後讀入另一個整型數。如果","這一特定字符沒有找到, scanf()函數就終止。若參數之間的分隔符為空格,則參數之間必須輸入一個或多個空格。
說明:
(1).對於字符串數組或字符串指針變量,由於數組名和指針變量名本身就是地址,因此使用scanf()函數時,不需要在它們前面加上"&"操作符。
例3
mian()
{
char *p, str[20];
scanf("%s", p); /*從健盤輸入字符串*/
scanf("%s", str);
printf("%s\n", p); /*向屏幕輸出字符串*/
printf("%s\n", str);
}
(2).可以在格式化字符串中的"%"各格式化規定符之間加入一個整數,表示任何讀操作中的最大位數。
如例3中若規定只能輸入10字符給字符串指針p,則第一條scanf()函數語句變為scanf("%10s", p);
程序運行時一旦輸入字符個數大於10,p就不再繼續讀入,而後面的一個讀入函數即scanf("%s", str)就會從第11個字符開始讀入。
實際使用scanf()函數時存在一個問題,下面舉例進行說明:
當使用多個scanf()函數連續給多個字符變量輸入時, 例如:
main()
{
char c1, c2;
scanf("%c", &c1);
scanf("%c", &c2);
printf("c1 is %c, c2 is %c", c2\1, c2);
}
運行該程序,輸入一個字符A後回車(要完成輸入必須回車),在執行scanf("%c", &c1)時,給變量c1賦值"A",但回車符仍然留在緩沖區內,執行輸入語句scanf("%c", &c2)時,變量c2輸出的是一空行,如果輸入AB後回車,那麼輸出結果為: c1 is A, c2 is B。
要解決以上問題,可以在輸入函數前加入清除函數fflush()(這個函數的使用方法將在本節最後講述)。修改以上程序變成:
#include<stdio.h>
main()
{
char c1, c2;
scanf("%c", &c1);
fflush(stdin);
scanf("%c", &c2);
printf("c1 is %c, c2 is %c", c1, c2);
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved