数学建模社区-数学中国

标题: C语言中fgetc()函数用法 [打印本页]

作者: wangzheng3056    时间: 2013-7-24 10:16
标题: C语言中fgetc()函数用法
该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置。0 O$ X$ o( i. R- y2 }+ p( T

6 i. N/ b/ U/ _* y函数原型:int fgetc(FILE *fp);2 Q, C, x7 B; l7 h
6 f) z' X; o7 R  X/ y
函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。) E4 u4 c/ u8 r2 ^& q* d8 I
6 ^2 e- }" s( ~+ w
返回值:返回所得到的字符;若读入错误,返回EOF。+ ^" J. |4 V; \0 m9 d
: W1 |" ~* V+ n7 y9 R
下面用一个具体的例子来说明:1 a( M/ D& T+ y  ^2 p

1 A. K; s& @" a1 ]8 c: v  #include <stdio.h>
" Z6 w# I2 H1 m/ `9 m  #include <stdlib.h>: T9 M* }3 ~  e
/ L; _3 D# R; [5 M, ]( R
  int main(int argc, char *argv[])1 o* e( ~& m/ c; ~6 o' i5 ~- w
  {0 w" S( S/ L, X$ E1 q3 b+ j6 ?, G
    FILE *fp;0 g7 E, |7 c- H9 {# p1 o3 O+ g7 D
    char ch;
5 d' \0 s: l9 b/ I
+ e) |4 y/ b7 O( w  ?) E8 f    if((fp=fopen("test","r"))==NULL) {
8 W3 v/ I* p' `+ h0 B      printf("Cannot open file.\n");* P; q; J9 N' ?1 p; v/ {8 \  q
      exit(1);% r3 S0 Q3 B7 p& E
    }  \- V% \5 y* w3 L0 s) v& u: F3 L
1 g* y; H" t! o  _7 i
    while((ch=fgetc(fp)) != EOF) {
8 S, z8 R4 k( }. S      printf("%c", ch);
" B& l3 h% L/ [( ~: V( z6 a! T    }
, H* Q2 e& I# k    fclose(fp);
+ P: R$ Q% H; @( f& s- }( ~! C# {7 }/ Q3 O7 d
    return 0;
9 n. J6 f4 T* n( a% S  }: d  j5 `0 W+ ?; n+ @; n
0 u0 c& O! a! b; p  O/ d
下面给出另外一个例子:" c; `  ]4 b5 h- @

; X, t/ t. p9 T#include <string.h>
8 f9 [. p& j$ h: J( H: Z5 |        #include <stdio.h>1 b/ x) l& t- C7 J  [' O! k
       #include <conio.h>. ]+ p8 [" G. U# B

" a7 L! C: g  [8 o3 @0 Y
* g9 m, k/ q) f% `& y8 C- Aint main(void)( c5 F0 w: D- R
       {
( D* G& N  Z' k. L5 E6 Z              FILE *fp;
5 r: `( b6 L/ M& X7 y5 k              char string[] = "This is a test"; . j" [9 k: l0 d, |
          char ch; 2 N7 h0 O% k0 h& |
          /* 以读写方式打开一个名为test.txt的文件 */, @8 c3 o1 L2 e% m3 z
          fp = fopen("test.txt", "w+");
: o+ [0 R$ T' Q7 Y          /* 向文件中写入字符串string */0 l$ f1 b2 R1 h( {3 \
          fwrite(string, strlen(string), 1, fp);
/ ~9 S0 O$ U- j& o& \( l2 o+ h$ S1 l          /* 将fp指针指向文件首 */" z2 v& M( L* r3 |$ b/ k
          fseek(fp, 0, SEEK_SET); ( b1 z) f, U+ V6 ~
          do
2 s! h2 m( ?1 z7 S" U2 H, l, h$ _9 K          { 2 m# b- e# a0 w# H
                    /* 从文件中读一个字符 */
9 n& H2 I4 E( L9 x  B                    ch = fgetc(fp);
" s+ @: a3 J9 C* m- D! Y                    /* 显示该字符 */: q6 K, t' c6 R8 B. N
                    putch(ch); + E! \# n& u  R) y+ N, e$ y
          } while (ch != EOF);
% _+ }, {1 q, q          fclose(fp); * i& M' ~8 {( n+ c; G
          return 0; 0 }0 f( Q* u7 f2 e
       }
( t! e/ n1 W+ E1 e4 N, t# ~% ^" U; I, n8 x) d
例程说明:
& X* C' w- T3 o% q/ C& h7 H. G; D* s
(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。
5 Y. g! C' K$ d5 E
# y' W: M& Q: s0 c5 f  p% `(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch 来接受读出的字符。
. d/ u  K4 q9 |1 R$ K
# ^8 m" ^# R+ V% x" c(3)最后的运行结果是在屏幕上打印出This is a test字符串。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5