一、引言
請編寫程式:從鍵盤輸入乙個字串,將其中的小寫字母全部轉化為大寫在嗎,輸出到磁碟檔案「upper.txt"中儲存。輸入的字串以」!「結束。然後,再將檔案upper.txt中的內容讀出顯示在螢幕上。
初看此題覺得不是很難,寫**的時候發現自己久疏戰陣,很多檔案操作的用法有點生疏,下面我們來一一總結,搞清楚他們。
二、c語言檔案操作的函式
1、getchar()
2、putchar()
3、getc()
4、putc()
5、gets()
6、puts()
7、getch()
8、putch()
7、fgetchar()
8、fputchar()
9、fgetc()
10、fputc()
11、fgets()
12、fputs()
13、fread()
14、fwrite()
15、fscanf()
16、fprintf()
三、函式的用法
我們分別來說明以上函式的用法,輸入和輸出成對的來說明
1、getchar和putchar()
getchar() 和putchar()函式作用於輸入輸出流,分別是等待輸入流輸入字元,以及輸出流輸出字元;
getchar():等待鍵盤輸入字元,字元輸入後並不立即返回,而是將字元放置於緩衝區中,等待換行符,遇到換行符後函式返回,乙個字元乙個字元從緩衝區中讀取字元,直到從緩衝區讀完所有字元。
putchar(int _ch):該函式向輸出流來輸出乙個字元。
oid get_putcharfun()
return ;
}getc(file *file):如果是從標準輸入讀取字元則和getchar()沒有任何的區別,函式形式為getc(stdin);
看函式形式,我們還可以從檔案中讀取字元,每次讀取乙個字元,知道檔案末尾eof字元,在此處並不是以換行符作為終止符,而是檔案終止符;
putc(int _ch, file *fp):如果是向標準輸入讀取字元則和putchar()沒有任何的區別,函式形式為putc(ch,stdout);
看函式形式,我們還可以向檔案寫入字元,每次寫入乙個字元。
void get_putcfun()
*/ //測試檔案輸入輸出時的用法
char msg = "jkjkdjsaksksajksjksjclk%";
file *fp = fopen("file.txt", "at+");
if(fp == null)
char ch;
while((ch = getc(fp)) != eof)
int len = strlen(msg);
int i = 0;
while(len > 0)
fclose(fp);
return ;
}
3、getch()和putch()
這一對函式比較特殊,需要包含"conio.h"而不是"stdio.h"標頭檔案,兩個用法如下:
getch():給函式是等待標準鍵盤輸入,每次輸入乙個字元後就立即返回,且不進行回顯,即你在輸入介面時看不到你正在輸入的字元,
這點和getchar以及getc(stdin)有區別主要是以下方面:
* getchar()和getc(stdin)輸入時要進行回顯;
* getchar()和getc(stdin)輸入時並不是立即返回,等待換行符然後返回,getch()則是讀入到乙個字元後立即返回,並不是等待換行符的輸入。
putch(int _ch):該函式是向標準輸出輸入乙個字元和putchar和puc(ch,stout)並沒有什麼區別。
void get_putchfun()
return;
//getch();
}
4、gets()和puts()
gets函式時從標準輸入讀取一行,遇到換行符則返回,並且將換行符也讀入到字元緩衝區裡面;
puts()向標準輸出輸出一行資料,並且最後自動新增換行符。
void get_putsfun()
; gets(buffer);
puts(buffer);
}
5、fgetchar()和fputchar()
這兩個函式哈getchar和putchar並沒有任何區別,但是一般都是使用getchar和putchar進行操作;
void fget_fputcharfun()
6、fgetc和fputc
這兩個函式其實就是getc和putc中的輸入輸出檔案版本,例子如下:
void fget_fputcfun()
; file *fp = fopen("file.txt", "at+");
if(fp == null)
char ch;
while((ch = fgetc(fp))!=eof)
int len = strlen(msg);
int i = 0;
while(len > 0)
fclose(fp);
return;
}
七、fgets和fputs函式
fgets:從開啟的檔案中讀取一行,放入到緩衝區;
fputs:向開啟的檔案寫入一行資料。
**如下:
oid fgets_fputsfun()
while(fgets(buffer, sizeof(buffer), fp) != null)
fputs(outbuffer,fp);
fclose(fp);
return;
}
八、fread函式和fwrite函式
fread():
從檔案中讀取字元放到緩衝區中,
原型為:size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);
返回值:讀或寫的記錄數,成功時返回的記錄數等於nmemb,出錯或讀到檔案末尾時返回的記錄
數小於nmemb,也可能返回0。
如下面**進行測試
void fread_fwritefun()
; char writebuffer[1024] = ;
file *fp = fopen("file.txt", "r");
if(fp == null)
fseek(fp, 0, seek_end);
int lengths = ftell(fp);
fseek(fp,0,seek_set);
char *pbuffer = new char[lengths];
int len = fread(pbuffer,1 , lengths, fp);
pbuffer[len] = '\0';
if(len)
fclose(fp);
}void fwrite_fun()
char writebuffer[1024] = ;
fseek(fp, 0, seek_set);
int len = strlen(writebuffer);
int lengths = fwrite(writebuffer, 1, len, fp);
printf("file fp offset:%d\n", (int)ftell(fp));
fseek(fp, 0, seek_set);
fclose(fp);
}void printfun()
char ch;
while((ch = getc(fp)) != eof)
}
注意;在使用以上函式的時候要特別注意指標的是指向,以及指標的當前位置,否則很容易造成讀寫檔案時候的造成亂碼。
九、fscanf和fprintf函式
fscanf和fprintf函式主要是用來向檔案進行格式輸入輸出的函式,函式原型如下:
int fscanf(file *stream, char *format,[argument...])
int fprintf( file *stream, const char *format, [argument...];
void fprintffun()
; struct teststr ;
struct test tset[4] = ,,, };
struct teststr tsetstr[4] = ,,, };
char buffer[1024] = ;
file *fp = fopen("test.txt", "at+");
if (fp == null)
for (int i = 0; i < 4; i++)
fclose(fp);
}void fscanffun()
//fseek(fp, 0l, seek_set);
int number = 0;
float points = 0.0;
float extras = 0.0;
int last;
char str[16] = ;
//while (fscanf(fp, "%d,%d,%f,%f\n", &number, &last, &points, &extras) == 4)
// while (fscanf(fp, "%d,%d,%f,%s\n", &number, &last, &points, &str) == 4)
fclose(fp);
}
十、總結
檔案的操作不管是在c語言還是c++都是必須要掌握的基礎內容,再以後的學習中要多多的實踐。
一道面試題引發的pythonic
本文出自天外歸雲的 今天乙個朋友去面試,下面是一道測試工程師面試題 來自搜狗 自己寫了解法 coding utf 8 import redef filter log target,the log r target target dic for one in target target dic one...
一道面試題引發的思考
首先我們給出這道面試題的 以及題目 lista new arraylist list.add 1 list.add 2 for string item list 問 上段 執行會報錯嗎?如果把 1 換成 2 會報錯嗎?為什麼?首先給出答案 上面這段 執行不會報錯。把 1 換成 2 再執行就會報錯。為...
一道面試題引發的思考
好的面試官能夠能好的和面試者互動,而一場好的面試也能帶給面試者更多的思考 面試官給我出題後的 1 分鐘內,我給出了第一種思路 排序。將數字按公升序排序,去除最小的那個數即可。存在問題 時間複雜度高,只考慮了正數的情況。面試官給出了第一次提示時間複雜度過高,要求降低時間複雜度。於是在經過幾分鐘思考後,...