程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺析C說話中printf(),sprintf(),scanf(),sscanf()的用法和差別

淺析C說話中printf(),sprintf(),scanf(),sscanf()的用法和差別

編輯:關於C++

淺析C說話中printf(),sprintf(),scanf(),sscanf()的用法和差別。本站提示廣大學習愛好者:(淺析C說話中printf(),sprintf(),scanf(),sscanf()的用法和差別)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析C說話中printf(),sprintf(),scanf(),sscanf()的用法和差別正文


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

printf()函數依據format(格局)給出的格局打印輸入到STDOUT(尺度輸入)和其它參數中。前往值是輸入的字符數目。
sprintf
語法:
#include <stdio.h>
int sprintf( char *buffer, const char *format, ... );
sprintf()函數和printf()相似,格局掌握完整一樣,只需是printf應用的格局化字符串,在sprintf都可使用,只是把輸入發送到buffer(緩沖區)中。前往值是寫入的字符數目。

功效一:格局化數字字符串
sprintf(s, "%-8X", 12345); //s釀成:“12345   ”
年夜寫的“X”代表,16進制年夜寫情勢,寬度占8 個地位,“-”代表左對齊 。

功效二:掌握浮點數打印格局
浮點數應用格局符”%f”掌握,默許保存小數點後6 位數字 %m.nf”格局,個中m 表現打印的寬度,n 表現小數點後的位數
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”打印一個整數,即可以看到它所對應的ASCII 字符。以下法式段把一切可見字符的ASCII 碼對比表打印到屏幕上(這裡采取printf,留意”#”與”%X”適用時主動為16 進制數增長”0X”前綴):
for(int i = 32; i < 127; i++) {
    printf("[ %c ]: %3d 0x%#04X\n", i, i, i);
}

功效五:打印地址信息
有時調試法式時,我們能夠想檢查某些變量或許成員的地址,因為地址或許指針也不外是個32 位的數,你完整可使用打印無符號整數的”%u”把他們打印出來:
sprintf(s, "%u", &i);
不外平日人們照樣愛好應用16 進制而不是10 進制來顯示一個地址:
sprintf(s, "%08X", &i);
但是,這些都是直接的辦法,關於地址打印,sprintf 供給了專門的”%p”:
sprintf(s, "%p", &i);
我認為它現實上就相當於:
sprintf(s, "%0*x", 2 * sizeof(void *), &i);

功效六:應用前往值
printf與sprintf的前往值是寫入的字符數目。
也就是說每當一次sprinf 挪用停止今後,你不必再挪用一次strlen 便曾經曉得了卻果字符串的長度。如:
int len = sprintf(s, "%d", i);
scanf
語法:
  #include <stdio.h>
  int scanf( const char *format, ... );

scanf()函數依據由format(格局)指定的格局從stdin(尺度輸出)讀取,並保留數據到其它參數.
sscanf
語法:
  #include <stdio.h>
  int sscanf( const char *buffer, const char *format, ... );

函數sscanf()和scanf()相似, 只是輸出從buffer(緩沖區)中讀取.
sscanf與scanf相似,都是用於輸出的,只是後者以屏幕(stdin)為輸出源,前者以固定字符串為輸出源
用法:
%[ ]表現要讀入一個字符聚集, 假如[ 前面第一個字符是”^”,則表現反意思。[ ]內的字符串可所以1或更多字符構成。空字符集(%[])是違背劃定的,可招致弗成預知的成果。%[^]也是違背劃定的。

%[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
假如參數格局是:%[^=:] ,那末也能夠從 notepad:1.0.0.1001讀取notepad

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved