亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

標準I/O庫之格式化I/O

2024-06-28 13:28:42
字體:
來源:轉載
供稿:網友
標準I/O庫之格式化I/O

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/

一、格式化輸出

執行格式化輸出處理的是4個PRintf函數。

#include <stdio.h>int printf( const char *restrict format, ... );int fpritnf( FILE *restrict fp, const char *restrict fromat, ... );兩個函數的返回值:若成功則返回輸出字符數,若輸出出錯則返回負值int sprintf( char *restrict buf, const char *restrict format, ... );int snprintf( char *restrict buf, size_t n, const char *restrict format, ... );兩個函數返回值:若此成功則返回存入數組的字符數,若編碼出錯則返回負值

printf將格式化數據寫到標準輸出,fprintf寫至指定的流,sprintf將格式化的字符送入數組buf中。sprintf在該數組的尾端自動加一個null字節,但該字節不包括在返回值中。

注意,sprintf函數可能會造成由buf指向的緩沖區的溢出。調用者有責任確保該緩沖區足夠大。為了解決這種緩沖區溢出的問題,引入了snprintf函數。在該函數中,緩沖區長度是一個顯示參數,超過緩沖區尾端寫的任何字符都會被丟棄。如果緩沖區足夠大,snprintf函數就會返回寫入緩沖區的字符數。與sprintf相同,該返回值不包括結尾的null字節。若snprintf函數返回小于緩沖區長度n的正值,那么沒有截短輸出。若發生了一個編碼錯誤,snprintf則返回負值。

格式說明控制其余參數如果編寫,以后又如何顯示。每個參數按照轉換說明編寫,轉換說明以字符%開始,除轉換說明外,格式字符串中的其他字符將按原樣,不經任何修改地被復制輸出。一個轉換說明有4個可選部分,下面將它們都示于方括號中:

%[flags] [fldwidth] [precision] [lenmodifier] convtype

表5-5 轉換說明中的標志部分

標志說明
-在字段內左對齊輸出
+總是顯示帶符號轉換的符號
(空格)如果第一個字符不是符號,則在其前面加上一個空格
#指定另一種轉換形式(例如,對于十六進制格式,加0x前綴
0添加前導0(而非空格)進行填充

fldwidth說明轉換的最小字段寬度。如果轉換得到的字符較少,則用空格填充它。字段寬度是一個非負十進制數,或是一個星號(*)。

precision說明整型轉換后最少輸出數字位數、浮點數轉換后小數點后的最少位數、字符串轉換后的最大字符數。精度是一個句點(.),后接一個可選的非負十進制整數或一個星號(*)。

寬度和精度字段兩者皆可為*。此時,一個整型參數指定寬度或精度的值。該整型參數正好位于被轉換的參數之前。(注意對這句話的理解)。我們還是用一個實例來說明比較容易接受:

我們可以直接在fldwidth位置用一個整數10指定輸出寬度:

printf("%10d/n", 123);

也可以在fldwidth位置用*,而把指定寬度參數10放在轉換說明后面,被轉換的參數之前:

printf("%*d/n", 10, 123);

lenmodifier說明參數長度。其可能的取值示于表5-6中。

表5-6 轉換說明中的長度修飾符

長度修飾符說明
hh有符號或無符號的char
h有符號或無符號的short
l有符號或無符號的long或者寬字符
ll有符號或無符號的long long
jintmax_t或uintmax_t
zsize_t
tptrdiff_t
Llong double

convtype不是可選的。它控制如何解釋參數。表5-7中列出了各種轉換類型。

表5-7 轉換說明中的轉換類型部分

轉換類型說明
d、i有符號十進制
o無符號八進制
u無符號十進制
x、X無符號十六進制
f、Fdouble精度浮點數
e、E指數格式的double精度浮點數
g、G解釋為f、F、e或E,取決于被轉換的值
a、A十六進制指數格式的double精度浮點數
c字符(若帶長度修飾符l,則為寬字符)
s字符串(若帶長度修飾符l,則為寬字符串)
p指向void的指針
n將到目前為止,所寫的字符數寫入到指針所指向的無符號整型中
%%字符
C寬字符(XSI擴展,等效于lc)
S寬字符串(XSI擴展,等效于ls)

下列4中printf族的變體類似于上面的4種,但是可變參數表(...)代換成了arg。

#include <stdarg.h>#include <stdio.h>int vprintf( const char *restrict format, va_list arg );int vfprintf( FILE *restrict fp, const char *restrict format, va_list arg );兩個函數返回值:若成功則返回輸出字符數,若輸出出錯則返回負值int vsprintf( char *restrict buf, const char *restrict format, va_list arg );int vsnprintf( char *restrict buf, size_t n, const char *restrict format, va_list arg );兩個函數返回值:若成功則返回存入數組的字符數,若編碼出錯則返回負值

關于可變參數列表可參考《C和指針》7.6:Variable Argument Lists。

二、格式化輸入

執行格式化輸入處理的是三個scanf函數。

#include <stdio.h>int scanf( const char *restrict format, ... );int fscanf( FILE *restrict fp, const char *restrict format, ... );int sscanf( const char *restrict buf, const char *restrict format, ... );三個函數返回值:若成功則返回指定的輸入項數;若輸入出錯或在任意變換前已到達文件結尾則返回EOF

scanf族用于分析輸入字符串,并將字符序列轉換成指定類型的變量。格式之后的各參數包含了變量的地址,以用轉換結果初始化這些變量。

格式說明控制如何轉換參數,以便對它們賦值。轉換說明以%字符開始。除轉換說明和空白字符外,格式字符串中的其他字符必須與輸入匹配。若有一個字符不匹配,則停止后續處理,不再讀輸入的其余部分。

一個轉換說明有三個可選部分,下面將它們都示于方括號中:

%[*] [fldwidth] [lenmodifier] convtype

可選的前導星號(*)用于抑制轉換。按照轉換說明的其余部分對輸入進行轉換,但轉換結果并不存放在參數中。

fldwidth說明最大寬度(即最大字符數)。

lenmodifier說明要用轉換結果初始化的參數大小。由printf函數族支持的長度修飾符同樣得到scanf函數族的支持(見表5-6中的長度修飾符列表)。

convtype字段類似于printf族的轉換類型字段,但兩者之間還有些差別。一個差別是,存儲在無符號類型中的結果可在輸入時帶上符號。例如,-1可被轉換成4 294 967 295賦予無符號整型變量。表5-8列出了scanf函數族支持的轉換類型。

表5-8 轉換說明中的轉換類型

轉換類型說明
d有符號十進制,基數為10
i有符號十進制,基數由輸入格式決定
o無符號八進制(輸入可選地有符號)
u無符號十進制,基數為10(輸入可選地有符號)
x無符號十六進制(輸入可選地有符號)
a、A、e、E、f、F、g、G浮點數
c字符(若帶長度修飾符l,則為寬字符)
s字符串(若帶長度修飾符l,則為寬字符串)
[匹配列出的字符序列,以]終止
[^匹配除列出字符以外的所有字符,以]終止
p指向void的指針
n將到目前為止讀取的字符數寫入到指針所指向的無符號整型中
%%字符
C寬字符(XSI擴展,等效于lc)
S寬字符串(XSI擴展,等效于ls)

與printf族一樣,scanf族也支持函數使用由<stdarg.h>說明的可變參數表。

#include <stdarg.h>#include <stdio.h>int vscanf( const char *restrict format, va_list arg );int vfscanf( FILE *restrict fp, const char *restrict format, va_list arg );int vsscanf( const char *restrict buf, const char *restrict format, va_list arg );三個函數返回值:指定的輸入項數,若輸入出錯或在任一變換前已到達文件結尾則返回EOF

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩亚洲欧美中文高清在线| 久久九九精品99国产精品| xxxxxxxxx欧美| 亚洲美女福利视频网站| 国产精品一区二区3区| 欧美成人精品一区二区三区| 国产精品成人品| 在线观看日韩欧美| 亚洲视频欧洲视频| 亚洲成人激情在线观看| 奇米一区二区三区四区久久| 久久久精品久久久久| 欧美成人精品影院| 亚洲午夜av久久乱码| 国产国语刺激对白av不卡| 亚洲第一区在线观看| 欧美激情videoshd| 欧美成人精品三级在线观看| 色综合久久天天综线观看| 久久久这里只有精品视频| 成人国产亚洲精品a区天堂华泰| 国产精品久久久久久久app| 国产精品久久久久不卡| 欧美最顶级丰满的aⅴ艳星| 欧洲成人免费视频| 久久久中精品2020中文| 一色桃子一区二区| 7777精品久久久久久| 欧美韩国理论所午夜片917电影| 亚洲片国产一区一级在线观看| 伊人青青综合网站| 在线免费观看羞羞视频一区二区| 亚洲男人av电影| 久久免费国产精品1| 中文字幕精品久久| 欧美精品久久久久a| 亚洲精品小视频| 在线国产精品视频| 日韩毛片在线看| 欧美日韩另类视频| 最好看的2019的中文字幕视频| 久久久国产精彩视频美女艺术照福利| 在线观看视频亚洲| 青草青草久热精品视频在线观看| 国产精品视频大全| 欧美天堂在线观看| 亚洲综合日韩中文字幕v在线| 97视频免费在线看| 国产精品99久久99久久久二8| 亚洲免费人成在线视频观看| 国产精品视频精品视频| 久久久噜噜噜久久久| 欧美中文字幕在线| 成人福利在线视频| 久久久久久久97| 亚洲第一视频在线观看| 精品无码久久久久久国产| 在线播放日韩精品| zzjj国产精品一区二区| 中文字幕亚洲一区二区三区| 成人妇女免费播放久久久| 久久久久在线观看| 成人欧美一区二区三区黑人孕妇| 免费91麻豆精品国产自产在线观看| 欧美性色19p| 日韩高清免费观看| 日本成熟性欧美| 精品国产一区二区三区四区在线观看| 欧美午夜激情在线| 成人免费淫片aa视频免费| 国产精品99久久久久久久久久久久| 一色桃子一区二区| 美女av一区二区| 亚洲视频在线免费观看| 亚洲最大av在线| 久久伊人精品天天| 亚洲国产成人一区| 国产美女精品视频免费观看| 成人黄色大片在线免费观看| 欧洲成人午夜免费大片| 欧美亚洲另类在线| 91精品成人久久| 亚洲直播在线一区| 亚洲日本欧美日韩高观看| 2021国产精品视频| 欧美日韩人人澡狠狠躁视频| 91成人精品网站| 久久艹在线视频| 国产精品亚洲一区二区三区| 8x海外华人永久免费日韩内陆视频| 久久人人爽人人爽人人片av高清| 成人亚洲综合色就1024| 97av视频在线| 中文字幕成人精品久久不卡| 日韩av资源在线播放| 亚洲天堂一区二区三区| 亚洲aⅴ男人的天堂在线观看| 欧美激情在线狂野欧美精品| 亚洲欧美日韩成人| 久久视频国产精品免费视频在线| 欧美野外猛男的大粗鳮| 国产精品亚洲综合天堂夜夜| 久久国产视频网站| 另类美女黄大片| 国产精品视频一区二区高潮| 日本老师69xxx| 高清一区二区三区日本久| 久久久亚洲福利精品午夜| 久久精品国产亚洲精品| 91精品国产综合久久香蕉最新版| 91国在线精品国内播放| 在线观看日韩欧美| 欧美日韩一区二区免费视频| 欧美精品videofree1080p| 精品一区二区三区电影| 成人免费看黄网站| 亚洲欧洲在线视频| 国产综合香蕉五月婷在线| 夜夜狂射影院欧美极品| 亚洲午夜久久久久久久| 日韩av在线直播| 欧美日本高清一区| 欧美性猛交xxxx乱大交极品| 91精品国产91久久久久福利| 欧美视频免费在线观看| 日韩成人网免费视频| 欧美孕妇孕交黑巨大网站| 中文字幕国产亚洲| 日韩精品在线观看视频| 在线色欧美三级视频| 亚洲网站在线播放| 亚洲精品国产欧美| 久久精品国产一区二区三区| 欧美精品激情在线观看| 欧美日韩精品国产| 国产精品成人免费视频| 自拍偷拍免费精品| 日韩精品视频中文在线观看| 9.1国产丝袜在线观看| 日韩高清电影免费观看完整版| 国产极品精品在线观看| 国产成人在线亚洲欧美| 国产成人精品久久亚洲高清不卡| 日韩中文在线不卡| 成人黄色在线观看| 亚洲精品久久久一区二区三区| 国产精品影院在线观看| 国产日韩精品一区二区| 久久久亚洲福利精品午夜| 亚洲视频第一页| 亚洲午夜av电影| 欧美精品videofree1080p| 日本aⅴ大伊香蕉精品视频| 欧美激情xxxx性bbbb| 亚洲香蕉成人av网站在线观看| 国产精品夫妻激情| 日韩av在线不卡| 国产精品一区av| 18一19gay欧美视频网站| 国产精品成人观看视频国产奇米| 国产日韩中文在线| 国产精品视频精品| 欧美激情视频一区二区| 成人午夜高潮视频|