程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 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%#04Xn", 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