首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
二、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
main()
{
char c1, c2;
scanf("%c", &c1);
fflush(stdin);
scanf("%c", &c2);
printf("c1 is %c, c2 is %c", c1, c2);
}
1.1.2 非格式化輸入輸出函數
非格式化輸入輸出函數可以由上面講述的標準格式化輸入輸出函數代替, 但這些函數編譯后代碼少, 相對占用內存也小, 從而提高了速度, 同時使用也比較方便。下面分別進行介紹。
一、puts()和gets()函數
1. puts()函數
puts()函數用來向標準輸出設備(屏幕)寫字符串并換行, 其調用格式為:
puts(s);
其中s為字符串變量(字符串數組名或字符串指針)。
puts()函數的作用與語printf("%s\n", s)相同。
例4:
main()
{
char s[20], *f; /*定義字符串數組和指針變量*/
strcpy(s, "Hello! Turbo C2.0"); /*字符串數組變量賦值*/
f="Thank you"; /*字符串指針變量賦值*/
puts(s);
puts(f);
}
說明:
(1). puts()函數只能輸出字符串, 不能輸出數值或進行格式變換。
(2). 可以將字符串直接寫入puts()函數中。如:
puts("Hello, Turbo C2.0");
2. gets()函數
gets()函數用來從標準輸入設備(鍵盤)讀取字符串直到回車結束, 但回車符 不屬于這個字符串。其調用格式為:
gets(s);
其中s為字符串變量(字符串數組名或字符串指針)。
gets(s)函數與scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s) 函數輸入字符串時存在一個問題, 就是如果輸入了空格會認為輸入字符串結束, 空格后的字符將作為下一個輸入項處理, 但gets() 函數將接收輸入的整個字符串直到回車為止。
例5
main()
{
char s[20], *f;
printf("What’s your name?\n");
gets(s); /*等待輸入字符串直到回車結束*/
puts(s); /*將輸入的字符串輸出*/
puts("How old are you?");
gets(f);
puts(f);
}
說明:
(1). gets(s)函數中的變量s為一字符串。如果為單個字符, 編譯連接不會有錯誤, 但運行后會出現"Null pointer asignmemt"的錯誤。
二、putchar()、getch()、getche()和getchar()函數
1. putchar()函數
putchar()函數是向標準輸出設備輸出一個字符, 其調用格式為:
putchar(ch);
其中ch為一個字符變量或常量。
putchar()函數的作用等同于printf("%c", ch);
例6:
#include
main()
{
char c: /*定義字符變量*/
c=’B’; /*給字符變量賦值*/
putchar(c); /*輸出該字符*/
putchar(’\x42’); /*輸出字母B*/
putchar(0x42); /*直接用ASCII碼值輸出字母B*/
}
從本例中的連續四個字符輸出函數語句可以分清字符變量的不同賦值方法。
相關推薦:計算機等考二級C語言備考:C語言/C++編譯過程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |