scanf()函数的用法和实践
?
scanf()函數的用法和實踐
摘要:
本文闡述了基于ANSI,Win 95,Win NT上的 C/C++語言中scanf()函數的用法,以及在實際使用中常見錯誤及對策。
關鍵詞:
scanf()
一、???????????? 序言
在CSDN論壇的C/C++版塊,我時常見到“對于scanf()函數的用法、及出現的各種錯誤而迷惑”的帖子,萌發了我寫這篇文章的念頭。文中結合自身在學習和編程中對它的認識和體會,以具體示例闡述問題,目的在于使得初學者能夠正確使用scanf()函數,少走不必要的彎路。
二、???????????? scanf()函數的用法
scanf()函數是格式化輸入函數,它從標準輸入設備(鍵盤) 讀取輸入的信息。
其調用格式為:????? scanf("<格式化字符串>",<地址表>);
格式化字符串包括以下三類不同的字符;
1、 格式化說明符:
格式化說明符與printf()函數中的格式說明符基本相同。但和printf()函數中格式字符串的用法有一些小區別。我們來看下面這個表。
格式字符 | 說明 |
%d | 從鍵盤輸入十進制整數 |
%o | 從鍵盤輸入八進制整數 |
%x | 從鍵盤輸入十六進制整數 |
%c | 從鍵盤輸入一個字符 |
%s | 從鍵盤輸入一個字符串 |
%f | 從鍵盤輸入一個實數 |
%e | 與%f的作用相同 |
附加格式說明字符表
字符 | 說明 |
L | 輸入"長"數據 |
H | 輸入"短"數據 |
M | 指定輸入數據所占寬度 |
* | 空讀一個數據 |
2、??? 空白字符: 空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符。
3、??? 非空白字符: 一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。
地址表是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數完全不同,要特別注意。各個變量的地址之間同","分開。
例如:
#include <stdio.h>
void main()
{
?????? int i, j;
?????? printf("i, j=?\n");
?????? scanf("%d, %d", &i, &j);
}
上例中的scanf()函數先讀一個整型數,然后把接著輸入的逗號剔除掉,最后讀入另一個整型數。如果","這一特定字符沒有找到,scanf()函數就終止。若參數之間的分隔符為空格,則參數之間必須輸入一個或多個空格。
說明:
(1)????????? 對于字符串數組或字符串指針變量,由于數組名和指針變量名本身就是地址,因此使用scanf()函數時,不需要在它們前面加上"&"操作符。
例如:
#include <stdio.h>
void main()
{
?????? char *p, str[20];
??????
????????????? p = new char[20];
?????????????
????????? scanf("%s", p); /*從健盤輸入字符串*/
????????? scanf("%s", str);
????????? printf("%s\n", p); /*向屏幕輸出字符串*/
????????? printf("%s\n", str);
}
(2)????????? 可以在格式化字符串中的"%"各格式化規定符之間加入一個整數,表示任何讀操作中的最大位數。
如上例中若規定只能輸入10字符給字符串指針p,則第一條scanf() 函數語句變為:scanf("%10s", p);
程序運行時一旦輸入字符個數大于10,p就不再繼續讀入,而后面的一個讀入函數即scanf("%s", str)就會從第11個字符開始讀入。
(3)???????????? scanf()函數中沒有精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數為2位的實數。
(4)???????????? scanf中要求給出變量地址,如給出變量名則會出錯
如 scanf("%d",a);是非法的,應改為scnaf("%d",&a);才是合法的。
總結
以上是生活随笔為你收集整理的scanf()函数的用法和实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 考察新人的两道c语言题目
- 下一篇: Linux下用C获取当前系统时间