最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C語(yǔ)言中printf(),sprintf(),scanf(),sscanf()的用法和區(qū)別

 更新時(shí)間:2013年07月11日 12:38:30   作者:  
以下是對(duì)C語(yǔ)言中printf(),sprintf(),scanf(),sscanf()的用法以及區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下

printf
語(yǔ)法:
#include <stdio.h>
int printf( const char *format, ... );

printf()函數(shù)根據(jù)format(格式)給出的格式打印輸出到STDOUT(標(biāo)準(zhǔn)輸出)和其它參數(shù)中。返回值是輸出的字符數(shù)量。
sprintf
語(yǔ)法:
#include <stdio.h>
int sprintf( char *buffer, const char *format, ... );
sprintf()函數(shù)和printf()類(lèi)似,格式控制完全一樣,只要是printf使用的格式化字符串,在sprintf都可以使用,只是把輸出發(fā)送到buffer(緩沖區(qū))中。返回值是寫(xiě)入的字符數(shù)量。

功能一:格式化數(shù)字字符串
sprintf(s, "%-8X", 12345); //s變成:“12345   ”
大寫(xiě)的“X”代表,16進(jìn)制大寫(xiě)形式,寬度占8 個(gè)位置,“-”代表左對(duì)齊 。

功能二:控制浮點(diǎn)數(shù)打印格式
浮點(diǎn)數(shù)使用格式符”%f”控制,默認(rèn)保留小數(shù)點(diǎn)后6 位數(shù)字 %m.nf”格式,其中m 表示打印的寬度,n 表示小數(shù)點(diǎn)后的位數(shù)
sprintf(s, "%10.3f", 3.1415626); //s變成:"      3.142"

功能三:連接兩個(gè)字符串
直接連接:
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”

截取字符串的某一些字符進(jìn)行連接,
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 碼對(duì)照
我們知道,使用”%d”或者”%x”打印一個(gè)字符,便能得出它的10 進(jìn)制或16 進(jìn)制的ASCII 碼;反過(guò)來(lái),使用”%c”打印一個(gè)整數(shù),便可以看到它所對(duì)應(yīng)的ASCII 字符。以下程序段把所有可見(jiàn)字符的ASCII 碼對(duì)照表打印到屏幕上(這里采用printf,注意”#”與”%X”合用時(shí)自動(dòng)為16 進(jìn)制數(shù)增加”0X”前綴):
for(int i = 32; i < 127; i++) {
    printf("[ %c ]: %3d 0x%#04X\n", i, i, i);
}

功能五:打印地址信息
有時(shí)調(diào)試程序時(shí),我們可能想查看某些變量或者成員的地址,由于地址或者指針也不過(guò)是個(gè)32 位的數(shù),你完全可以使用打印無(wú)符號(hào)整數(shù)的”%u”把他們打印出來(lái):
sprintf(s, "%u", &i);
不過(guò)通常人們還是喜歡使用16 進(jìn)制而不是10 進(jìn)制來(lái)顯示一個(gè)地址:
sprintf(s, "%08X", &i);
然而,這些都是間接的方法,對(duì)于地址打印,sprintf 提供了專(zhuān)門(mén)的”%p”:
sprintf(s, "%p", &i);
我覺(jué)得它實(shí)際上就相當(dāng)于:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);

功能六:利用返回值
printf與sprintf的返回值是寫(xiě)入的字符數(shù)量。
也就是說(shuō)每當(dāng)一次sprinf 調(diào)用結(jié)束以后,你無(wú)須再調(diào)用一次strlen 便已經(jīng)知道了結(jié)果字符串的長(zhǎng)度。如:
int len = sprintf(s, "%d", i);
scanf
語(yǔ)法:
  #include <stdio.h>
  int scanf( const char *format, ... );

scanf()函數(shù)根據(jù)由format(格式)指定的格式從stdin(標(biāo)準(zhǔn)輸入)讀取,并保存數(shù)據(jù)到其它參數(shù).
sscanf
語(yǔ)法:
  #include <stdio.h>
  int sscanf( const char *buffer, const char *format, ... );

函數(shù)sscanf()和scanf()類(lèi)似, 只是輸入從buffer(緩沖區(qū))中讀取.
sscanf與scanf類(lèi)似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源
用法:
%[ ]表示要讀入一個(gè)字符集合, 如果[ 后面第一個(gè)字符是”^”,則表示反意思。[ ]內(nèi)的字符串可以是1或更多字符組成。空字符集(%[])是違反規(guī)定的,可導(dǎo)致不可預(yù)知的結(jié)果。%[^]也是違反規(guī)定的。

%[a-z] 讀取在 a-z 之間的字符串,如果不在此之前則停止,如
char s[]="hello, my friend” ; // 注意: ,逗號(hào)在不 a-z之間
sscanf( s, “%[a-z]”, string ) ; // string=hello

%[^a-z] 讀取不在 a-z 之間的字符串,如果碰到a-z之間的字符則停止,如
char s[]="HELLOkitty” ; // 注意: ,逗號(hào)在不 a-z之間
sscanf( s, “%[^a-z]”, string ) ; // string=HELLO

%*[^=] 前面帶 * 號(hào)表示不保存變量。跳過(guò)符合條件的字符串。
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%*[^=]", szfilename ) ;// szfilename=NULL,因?yàn)闆](méi)保存
intj = sscanf( s, "%*[^=]=%s", szfilename ) ;// szfilename=1.0.0.1001

%40c 讀取40個(gè)字符
%[^=] 讀取字符串直到碰到'='號(hào),'^'后面可以帶更多字符,如:
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%[^=]", szfilename ) ;           // szfilename=notepad
如果參數(shù)格式是:%[^=:] ,那么也可以從 notepad:1.0.0.1001讀取notepad

相關(guān)文章

  • C語(yǔ)言控制進(jìn)程之進(jìn)程等待詳解

    C語(yǔ)言控制進(jìn)程之進(jìn)程等待詳解

    這篇文章主要介紹了C語(yǔ)言控制進(jìn)程之進(jìn)程等待即回收子進(jìn)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語(yǔ)言實(shí)現(xiàn)十六進(jìn)制轉(zhuǎn)換為十進(jìn)制的方法詳解

    C語(yǔ)言實(shí)現(xiàn)十六進(jìn)制轉(zhuǎn)換為十進(jìn)制的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)十六進(jìn)制轉(zhuǎn)換為十進(jìn)制的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • C++模板之特化與偏特化詳解

    C++模板之特化與偏特化詳解

    這篇文章主要介紹了C++模板之特化與偏特化詳解,本文講解了什么是C++模板、模板特化、模板偏特化、特化與偏特化的調(diào)用順序等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++通過(guò)SQLiteSDK增刪改查的實(shí)現(xiàn)示例

    C++通過(guò)SQLiteSDK增刪改查的實(shí)現(xiàn)示例

    SQLite是一種輕量級(jí)的嵌入式數(shù)據(jù)庫(kù),可以利用SQLiteSDK執(zhí)行數(shù)據(jù)庫(kù)的增刪改查操作,本文主要介紹了C++通過(guò)SQLiteSDK增刪改查,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • vscode中配置LeetCode插件的教程(愉快刷題)

    vscode中配置LeetCode插件的教程(愉快刷題)

    這篇文章主要介紹了vscode中配置LeetCode插件的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-03-03
  • c++并查集優(yōu)化(基于size和rank)

    c++并查集優(yōu)化(基于size和rank)

    這篇文章主要介紹了c++并查集優(yōu)化(基于size和rank),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Qt?Qml實(shí)現(xiàn)任意角為圓角的矩形

    Qt?Qml實(shí)現(xiàn)任意角為圓角的矩形

    在?Qml?中,矩形(Rectangle)是最常用的元素之一,本文將介紹如何通過(guò)自定義?Qml?元素實(shí)現(xiàn)一個(gè)任意角可為圓角的矩形,感興趣的可以了解下
    2025-01-01
  • C++使用TinyXML解析XML

    C++使用TinyXML解析XML

    本文詳細(xì)講解了C++使用TinyXML解析XML的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 詳解C語(yǔ)言中的字符串?dāng)?shù)組

    詳解C語(yǔ)言中的字符串?dāng)?shù)組

    這篇文章主要介紹了C語(yǔ)言中的字符串?dāng)?shù)組,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 如何通過(guò)wrap malloc定位C/C++的內(nèi)存泄漏問(wèn)題

    如何通過(guò)wrap malloc定位C/C++的內(nèi)存泄漏問(wèn)題

    用C/C++開(kāi)發(fā)的程序執(zhí)行效率很高,但卻經(jīng)常受到內(nèi)存泄漏的困擾。本文提供一種通過(guò)wrap malloc查找memory leak的思路。
    2021-05-05

最新評(píng)論

陵川县| 通河县| 康平县| 牡丹江市| 页游| 孙吴县| 临沂市| 团风县| 柳林县| 嵩明县| 翼城县| 渝中区| 女性| 阳谷县| 英德市| 巴里| 托里县| 汝城县| 渭源县| 无棣县| 栾川县| 永州市| 鹤山市| 岫岩| 桂东县| 余江县| 四子王旗| 新野县| 邹城市| 婺源县| 凤城市| 冷水江市| 瑞丽市| 新田县| 伽师县| 大新县| 曲水县| 合川市| 吴江市| 辽中县| 英德市|