该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置。' q5 W- o0 \- H1 @
; u$ E9 C& _" T
函数原型:int fgetc(FILE *fp); 4 ~4 L. {* C1 S% L8 P " \' _1 V/ `/ k9 D) G5 ]函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。 }0 [( R8 S, R6 h' C& t7 q/ \( A' {, h) ~* u. ^* r& g- M
返回值:返回所得到的字符;若读入错误,返回EOF。 + f( k" E) J/ m, J" s# v% r. j6 O- M1 k5 c/ j
下面用一个具体的例子来说明: 5 O$ O6 U+ _$ W; x, T" u$ Q4 l# I, N4 Y& i- e7 D+ I
#include <stdio.h>2 ~6 \$ }" ~# C6 P( o ?3 J8 {
#include <stdlib.h> " \& X: |% I% l# v! f6 e1 k1 y" k& @2 V
int main(int argc, char *argv[]) 5 y1 V8 i" C* g( S. i6 P { ) Q( F7 j+ {/ N2 ]) n# v6 m FILE *fp; # y1 H& f6 a4 u& i! K char ch;0 j& K9 n/ I0 y' s3 x
( E% X2 c6 ]* u% w0 z/ K. d if((fp=fopen("test","r"))==NULL) { ; j& k) j( B2 u+ z printf("Cannot open file.\n"); + o6 u$ y" G- u8 } U) y. b exit(1);7 K( a: O' b1 A* C5 a
}- ~$ X% x: R0 A/ g/ o
/ d3 E: w8 o* P while((ch=fgetc(fp)) != EOF) { 4 V; N, j3 t. H, B( t9 i3 y printf("%c", ch); 4 w5 L/ s* K, T! a8 X! L0 X+ Q7 [ }. y T7 z- W3 ^' }' p& K
fclose(fp);$ g& m& x6 h$ }2 N- V! M/ {
G6 y7 y1 |/ h; [# O# g9 R7 m; s, @ return 0;' V, l0 l( S5 j
} $ _8 |3 L' z7 \. b# E/ F+ x$ _1 D T, Y/ V g+ E
下面给出另外一个例子:. y0 H5 _6 h# Z1 {9 `
2 t5 ]; Z! K+ [5 V+ a0 |9 R
#include <string.h>" B1 R) Z+ G/ \) Q3 [0 k2 E3 e% l* q
#include <stdio.h> - X2 B; }2 G$ s! q6 r% u4 L #include <conio.h>9 H1 q2 \/ U, |) v. Y# I
8 B, h2 p6 S" G& [) m
7 @+ s5 K+ L# b- k$ ~# c4 Sint main(void)- U1 L& i( V6 G2 c9 ?
{ ~: i3 o1 Q- i) I" F
FILE *fp; 9 m# c8 E, L" ^3 ] char string[] = "This is a test"; $ R3 e: |6 i$ R0 @ char ch; , K. N2 Z c- ~0 W: c* X4 M /* 以读写方式打开一个名为test.txt的文件 */ - ?8 K) V% i- Z/ \$ W4 ~+ ] fp = fopen("test.txt", "w+"); 9 t o+ n. o5 G7 K; z! E7 } /* 向文件中写入字符串string */ + l% w$ |9 y, N Q5 {% r fwrite(string, strlen(string), 1, fp); $ e" Q8 p' h' e% q+ n }
/* 将fp指针指向文件首 */+ s: `8 P' }/ N- @6 e: \) x
fseek(fp, 0, SEEK_SET); - P) t4 y C0 J( T/ n! ` do 4 y: A$ y7 K; @% N; u9 W { % o* {) x6 l4 q: _7 o1 n
/* 从文件中读一个字符 */8 i9 q( w" I: L4 C8 H& r
ch = fgetc(fp); ( D: K2 U: F& T/ O /* 显示该字符 */ + P! J m0 h4 e. c9 m putch(ch); ! S' e$ t, D3 n, ^, W } while (ch != EOF); & q' Q- n' |2 b fclose(fp); 8 k8 K! @1 h3 d! n: |! \. s6 a return 0; ' O: K) x' @) L+ y/ _- H/ Q } 7 O/ Z0 E* w0 ^& d, s 8 J* V% }9 _3 o0 l1 x. P! }. p; d- j. s L" Z例程说明: 4 P& U" W- C* g ) a- A+ R) G' ^0 q' c1 a(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。% Y- O+ P/ T2 ~# ~) k
- {2 T8 w9 o' I. a C- J, P- Q. u(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch 来接受读出的字符。 7 P: i5 @) u" j$ ^+ j/ W U7 X- e% W: n( X! a r. N E
(3)最后的运行结果是在屏幕上打印出This is a test字符串。