淺析C語言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別
printf
語法:
#include <stdio.h>
int printf( const char *format, ... );
printf()函數(shù)根據(jù)format(格式)給出的格式打印輸出到STDOUT(標(biāo)準(zhǔn)輸出)和其它參數(shù)中。返回值是輸出的字符數(shù)量。
sprintf
語法:
#include <stdio.h>
int sprintf( char *buffer, const char *format, ... );
sprintf()函數(shù)和printf()類似,格式控制完全一樣,只要是printf使用的格式化字符串,在sprintf都可以使用,只是把輸出發(fā)送到buffer(緩沖區(qū))中。返回值是寫入的字符數(shù)量。
功能一:格式化數(shù)字字符串
sprintf(s, "%-8X", 12345); //s變成:“12345 ”
大寫的“X”代表,16進制大寫形式,寬度占8 個位置,“-”代表左對齊 。
功能二:控制浮點數(shù)打印格式
浮點數(shù)使用格式符”%f”控制,默認(rèn)保留小數(shù)點后6 位數(shù)字 %m.nf”格式,其中m 表示打印的寬度,n 表示小數(shù)點后的位數(shù)
sprintf(s, "%10.3f", 3.1415626); //s變成:" 3.142"
功能三:連接兩個字符串
直接連接:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};s
printf(dest,"%.5s%.4s",src1,src2); //output:“abcde1234”
截取字符串的某一些字符進行連接,
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.*s%.*s",2,src1,3,src2); //output:“ab123”
功能四:字符/Ascii 碼對照
我們知道,使用”%d”或者”%x”打印一個字符,便能得出它的10 進制或16 進制的ASCII 碼;反過來,使用”%c”打印一個整數(shù),便可以看到它所對應(yīng)的ASCII 字符。以下程序段把所有可見字符的ASCII 碼對照表打印到屏幕上(這里采用printf,注意”#”與”%X”合用時自動為16 進制數(shù)增加”0X”前綴):
for(int i = 32; i < 127; i++) {
printf("[ %c ]: %3d 0x%#04X\n", i, i, i);
}
功能五:打印地址信息
有時調(diào)試程序時,我們可能想查看某些變量或者成員的地址,由于地址或者指針也不過是個32 位的數(shù),你完全可以使用打印無符號整數(shù)的”%u”把他們打印出來:
sprintf(s, "%u", &i);
不過通常人們還是喜歡使用16 進制而不是10 進制來顯示一個地址:
sprintf(s, "%08X", &i);
然而,這些都是間接的方法,對于地址打印,sprintf 提供了專門的”%p”:
sprintf(s, "%p", &i);
我覺得它實際上就相當(dāng)于:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);
功能六:利用返回值
printf與sprintf的返回值是寫入的字符數(shù)量。
也就是說每當(dāng)一次sprinf 調(diào)用結(jié)束以后,你無須再調(diào)用一次strlen 便已經(jīng)知道了結(jié)果字符串的長度。如:
int len = sprintf(s, "%d", i);
scanf
語法:
#include <stdio.h>
int scanf( const char *format, ... );
scanf()函數(shù)根據(jù)由format(格式)指定的格式從stdin(標(biāo)準(zhǔn)輸入)讀取,并保存數(shù)據(jù)到其它參數(shù).
sscanf
語法:
#include <stdio.h>
int sscanf( const char *buffer, const char *format, ... );
函數(shù)sscanf()和scanf()類似, 只是輸入從buffer(緩沖區(qū))中讀取.
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源
用法:
%[ ]表示要讀入一個字符集合, 如果[ 后面第一個字符是”^”,則表示反意思。[ ]內(nèi)的字符串可以是1或更多字符組成。空字符集(%[])是違反規(guī)定的,可導(dǎo)致不可預(yù)知的結(jié)果。%[^]也是違反規(guī)定的。
%[a-z] 讀取在 a-z 之間的字符串,如果不在此之前則停止,如
char s[]="hello, my friend” ; // 注意: ,逗號在不 a-z之間
sscanf( s, “%[a-z]”, string ) ; // string=hello
%[^a-z] 讀取不在 a-z 之間的字符串,如果碰到a-z之間的字符則停止,如
char s[]="HELLOkitty” ; // 注意: ,逗號在不 a-z之間
sscanf( s, “%[^a-z]”, string ) ; // string=HELLO
%*[^=] 前面帶 * 號表示不保存變量。跳過符合條件的字符串。
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%*[^=]", szfilename ) ;// szfilename=NULL,因為沒保存
intj = sscanf( s, "%*[^=]=%s", szfilename ) ;// szfilename=1.0.0.1001
%40c 讀取40個字符
%[^=] 讀取字符串直到碰到'='號,'^'后面可以帶更多字符,如:
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%[^=]", szfilename ) ; // szfilename=notepad
如果參數(shù)格式是:%[^=:] ,那么也可以從 notepad:1.0.0.1001讀取notepad
上一篇:二維指針動態(tài)分配內(nèi)存連續(xù)問題深入分析
欄 目:C語言
下一篇:淺析C語言中sscanf 的用法
本文標(biāo)題:淺析C語言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4324.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 01-10delphi制作wav文件的方法