網(wǎng)站首頁 編程語言 正文
C語言的標(biāo)準(zhǔn)庫實(shí)現(xiàn)了簡單地文本輸入和輸出,文本流由一系列行組成,行的結(jié)尾是換行符,如果該系統(tǒng)并沒有遵循這種模式,則標(biāo)準(zhǔn)庫將通過一系列措施使得該系統(tǒng)適應(yīng)這種模式,例如標(biāo)準(zhǔn)庫可以在輸入端將回車符和換頁符都轉(zhuǎn)換為換行符,而在輸出端進(jìn)行反向轉(zhuǎn)換。
一、getchar
int getchar(void);
這是最簡單的輸入函數(shù),他可以從命令行一次讀取一個字符,如果遇到文件結(jié)尾則返回EOF,EOF一般在 stdio.h
中被定義為-1。
在許多環(huán)境中,可以用 <
來實(shí)現(xiàn)輸入重定向,它將把鍵盤輸入替換為文件輸入:如果程序prog中使用了函數(shù)getchar,則命令行
// 將infile文件輸入到prog
prog < infile
// 將prog的輸出到文件infile中
prog > infile
將使得程序prog從輸入文件infile(而不是鍵盤)中讀取字符,實(shí)際上,程序prog并不在乎輸入方式的改變,并且字符串“ 使用輸入輸出函數(shù)的每個源文件必須在應(yīng)用這些函數(shù)之前包含下列語句 當(dāng)文件名用尖括號包含時,預(yù)處理器將在由具體實(shí)現(xiàn)定義的有關(guān)位置中查找指定文件(UNIX: /usr/include),找不到將在當(dāng)前的項目下尋找。 輸出函數(shù)printf將內(nèi)部數(shù)值轉(zhuǎn)換為字符的形式,這個是大家最常用的輸出函數(shù),下面是他的完整描述,我們主要給出一些參數(shù) 在字符%和轉(zhuǎn)換字符中間可能依次包含以下內(nèi)容: (1)負(fù)號:指定被轉(zhuǎn)換參數(shù)按照左對齊方式輸出 (2)數(shù)字:指定最小字段參數(shù) (3)小數(shù)點(diǎn):將字段寬度和精度分開 (4)數(shù)字:用于指定精度,浮點(diǎn)數(shù)小數(shù)點(diǎn)后面位數(shù),整型最少輸出的數(shù)字?jǐn)?shù)目 (5)字母h或者l:h將整數(shù)作為short打印,l將整型作為long打印 sprintf函數(shù)和printf函數(shù)一樣,但是將輸出結(jié)果放到了string中,而不是標(biāo)準(zhǔn)輸出中,string必須足夠大用來存放輸出結(jié)果。 輸入函數(shù)scanf相對應(yīng)于輸出函數(shù)printf,他與后者相反的方向上提供同樣的轉(zhuǎn)換功能,當(dāng)scanf函數(shù)掃描完其格式串,或者碰到某些無法與個數(shù)控制說明匹配的情況時,函數(shù)將終止。如果達(dá)到文件結(jié)尾,給函數(shù)返回EOF,返回EOF與0是不用的,0表示出現(xiàn)了不匹配,EOF表示達(dá)到了文件末尾,sscanf用于從字符串中(而不是標(biāo)準(zhǔn)輸入)讀取字符序列。 我們讀取一個日期序列“25 Dec 1988” 在讀寫一個文件之前,必須通過fopen庫函數(shù)打開改文件,fopen用類似于x.c或y.c這樣的外部名與操作系統(tǒng)之間進(jìn)行某些必要的連接和通信,并返回一個隨后可以用于文件讀寫和操作的指針。 該指針被稱為文件指針,它指向一個包含文件信息的結(jié)構(gòu),這些信息包括:緩沖區(qū)的位置,緩沖區(qū)中當(dāng)前字符的位置,文件的讀或者寫的狀態(tài)、是否出錯或者是否已經(jīng)到達(dá)文件結(jié)尾等,用戶不必關(guān)心這些細(xì)節(jié),我們只需要聲明一個文件指針,在下面例子中,請注意,F(xiàn)ILE像int一樣是一個類型名,而不是結(jié)構(gòu)標(biāo)記,他是通過typedef定義的。 文件被打開后就需要考慮怎么讀的問題,最簡單的是getc 返回fp指向輸入流中的下一個字符,如果到達(dá)文件末尾或者出現(xiàn)錯誤,該函數(shù)將返回EOF 將字符c寫入fp指定的文件中,并返回寫入的字符,如果發(fā)生錯誤返回EOF 類似于getchar和putchar,getc和putc是宏而不是函數(shù) 啟動一個c程序時,操作系統(tǒng)將打開三個文件,并將三個文件的指針分別提供給該程序,這三個文件分別是標(biāo)準(zhǔn)輸入stdin,標(biāo)準(zhǔn)輸出stdout,和標(biāo)準(zhǔn)錯誤stderr,他們在 那么getchar和putchar就可以被這么定義 對于文件的格式化輸入和輸出可以使用函數(shù)fscanf和fprintf 我們可以通過向stderr寫入錯誤信息來將輸出寫到錯誤日志內(nèi),寫到stderr的輸出通常也會顯示到屏幕上。 標(biāo)準(zhǔn)庫函數(shù)exit,當(dāng)該函數(shù)被調(diào)用時,他將終止調(diào)用程序的執(zhí)行,任何調(diào)用該程序的進(jìn)程都可以獲取exit的參數(shù)值,因此,可以通過另一個將該進(jìn)程作為子進(jìn)程的程序來測試該程序的執(zhí)行是否成功,按照管理返回0表示一切正常,返回非0值通常表示出現(xiàn)了異常情況, 在主程序main中,語句return expr等價于exit(expr),使用exit有一個優(yōu)點(diǎn)就是可以從其他函數(shù)中調(diào)用,整個程序中只要調(diào)用了exit就結(jié)束。 exit是結(jié)束一個進(jìn)程,它將刪除進(jìn)程使用的內(nèi)存空間,同時把錯誤信息返回父進(jìn)程;而return是返回函數(shù)值并退出函數(shù)。 如果流fp中出現(xiàn)錯誤,則函數(shù)ferror返回一個非零值。 如果文件到達(dá)末尾則返回一個非零值 fgets函數(shù)從fp指向的文件中讀取下一個輸入行,包括換行符,并將它存放在字符數(shù)組line中,最多讀取maxline-1個字符。 fputs將一個字符串(不需要包含換行符)寫到一個文件中。otherprog | prog
#include
二、printf
int printf(char *format,...);
字符
參數(shù)類型;輸出格式
d,i
int類型,十進(jìn)制數(shù)
o
int類型,無符號八進(jìn)制數(shù)(沒有前導(dǎo)o)
x,X
int類型,無符號十六進(jìn)制數(shù)(沒有前導(dǎo)ox或oX),10-15分別是A-F
u
int類型,無符號十進(jìn)制數(shù)
c
int類型,單個字符
s
char*類型,打印字符串
f
double類型,十進(jìn)制小數(shù) [-]m.dddddd ,d的個數(shù)由精度確定,默認(rèn)為6
e,E
double類型,[-]m.dddddd e + xx,d的個數(shù)由精度確定,默認(rèn)為6
p
void*類型,指針類型
%
不轉(zhuǎn)換參數(shù),打印百分號
三、sprintf
int sprintf(char *string,char *format,arg1,arg2,...);
temp.c
#include
四、scanf
int scanf(char *format,...)
int sscanf(char *string,char *format,...)
#include
五、文件訪問
FILE *fp;
FILE *fopen(char *name,char *mode);
// 第一個參數(shù)為文件名
// 第二個參數(shù)為模式:讀“r”寫“w”追加“a”,某些系統(tǒng)還區(qū)分二進(jìn)制文件“b”
// 關(guān)閉打開的文件
void fclose(FILE *fp);
int getc(FILE *fp);
int putc(int c,FILE *fp);
#define getchar() getc(stdin);
#define putchar(c) putc((c),stdout);
int fscanf(FILE *fp,char *format,...);
int fprintf(FILE *fp,char *format,...);
六、錯誤處理
#include
#include
int ferror(FILE *fp);
int feof(FILE *fp);
七、行輸入和行輸出
char *fgets(char *line,int maxline,FILE *fp);
char *fputs(char *line,FILE *fp);
原文鏈接:https://blog.csdn.net/weixin_43903639/article/details/124697368
相關(guān)推薦
- 2022-07-09 python處理excel文件之xlsxwriter?模塊_python
- 2022-08-27 Pycharm遠(yuǎn)程連接服務(wù)器跑代碼的實(shí)現(xiàn)_python
- 2022-08-19 Linux系統(tǒng)文件目錄介紹
- 2022-12-29 Kotlin?Service服務(wù)組件開發(fā)詳解_Android
- 2022-12-02 python3中join和格式化的用法小結(jié)_python
- 2022-05-25 flutter實(shí)現(xiàn)底部導(dǎo)航欄_Android
- 2022-04-27 python如何將多個模型的ROC曲線繪制在一張圖(含圖例)_python
- 2022-05-24 C#多線程TPL常見操作誤區(qū)與異常處理_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支