数学建模社区-数学中国

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

作者: wangzheng3056    时间: 2013-7-24 10:16
标题: C语言中fgetc()函数用法
该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置。3 c" B5 A& w: V; P6 I- G

: T2 a) h7 O7 }8 B; l- m9 j函数原型:int fgetc(FILE *fp);  B/ R' x. w$ K3 _! f

* ?. C. ~+ x" x8 \8 [/ _函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。
& j& d# R% @( ]( h, I
) I. `8 U5 o$ R返回值:返回所得到的字符;若读入错误,返回EOF。
1 l+ v* ~( o6 f% C1 n+ A% C6 ?- b; t0 z* Q# N! f, Q& c
下面用一个具体的例子来说明:
2 Q% e. r, C& S8 [% |
2 C6 Q1 w3 C, f, N/ |  #include <stdio.h>
. x: |- a6 ^7 I0 f$ ~  #include <stdlib.h>
3 W3 J5 ^5 s) A
% ^" K) @3 \7 y" |" l( w/ M1 W  int main(int argc, char *argv[])4 C( L  Q, B- O' L  A. l
  {& d. x+ s& k7 |; r! k
    FILE *fp;
! }: ^9 s: f6 U9 }/ E! H( _+ ^3 Q    char ch;
5 `) [8 `6 k$ X0 F
; X$ A) f  }& q& V% w" B0 u    if((fp=fopen("test","r"))==NULL) {
8 ?( E& c  q9 C1 M8 G      printf("Cannot open file.\n");
1 F! u) k* u2 ~! [% X6 D* L      exit(1);$ J9 e5 Z4 J0 k2 ~( x/ m7 [
    }
1 q) Y! N2 V& Y& r3 R0 M# S) N) z
( D/ S0 M7 ~/ g9 W, ]' q/ k4 s    while((ch=fgetc(fp)) != EOF) {
2 R, V' h/ o' L( W9 D6 A: w      printf("%c", ch);  E8 o1 c( L+ n9 L1 k8 [5 X8 x% f
    }; c. v% C5 y& G# [: E
    fclose(fp);% i9 @; d3 g- [/ f0 t
7 o0 M3 A5 [$ X1 O  }+ _
    return 0;
1 C9 K7 Z4 w- d  }
( j7 g, I- L* w+ M' w6 S/ O, f1 E  u  g* U5 J. W9 ^! Q
下面给出另外一个例子:
' A0 c$ _: n+ }+ M
+ {& u4 m8 q3 B# l- e* C# X6 ^#include <string.h>( H! M, F* \2 X% v
        #include <stdio.h>
! Z, ^% L: h/ E       #include <conio.h>! n# H3 {/ {! m2 Q: s. w

3 F) e9 T# L+ }% f( G: k5 d8 r% \( a) n0 \$ e" f( F/ J8 m
int main(void)
. V( O5 {/ ^+ N* C+ r       {( h. S7 ?5 a# F
              FILE *fp; ( x3 m7 @6 ?+ S) Z+ h7 ^
              char string[] = "This is a test";
3 H. l) q0 e% K          char ch; & K! v  R' [+ x9 w- y1 v3 {* H% Z( C
          /* 以读写方式打开一个名为test.txt的文件 */3 Y# p  [! V4 o, {! p% L5 P
          fp = fopen("test.txt", "w+");
- c0 w- }8 ]. l          /* 向文件中写入字符串string */
8 X6 f; G  P( k! h+ ^  [          fwrite(string, strlen(string), 1, fp); * D( K; `2 q. k* m: F7 d; g0 u+ G/ r& R
          /* 将fp指针指向文件首 */
, Y& K4 m- J3 C0 \+ d7 _% T          fseek(fp, 0, SEEK_SET); 1 e9 {) k; [# U
          do - E4 x- m8 N5 j
          { 0 y0 ^, A0 M3 |6 k" }2 `
                    /* 从文件中读一个字符 */
7 z5 C9 O7 a5 U' N: Q# L' q. K+ A9 l1 ~                    ch = fgetc(fp); 7 t  h# M  |! q- r/ o, ]* S: n
                    /* 显示该字符 */. o* B* ^. B7 f! c( t
                    putch(ch); 6 Y0 s5 B0 U3 {! Q/ }$ ?/ ]
          } while (ch != EOF);
) g! W- B' T  c" B5 K          fclose(fp); 2 q! T: G: h* B6 b- E9 d0 `
          return 0; ( n2 b% _+ C0 f, E
       }0 U, Q$ h: s, Y+ h6 {/ [/ p. g

5 c" e8 c  r" r$ e例程说明:, C2 i. b& ?6 l) Z5 g; T% F/ l2 @
, ^! {( f% J1 R. Q9 {& |" r! ]
(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。
$ [9 y/ f4 U; Z* x& ~: |& u! t) }( t5 S' H
(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch 来接受读出的字符。( Q; n6 P! i) M6 W* B5 R: `2 R. V
3 H2 W$ M5 d- K) [! W7 r
(3)最后的运行结果是在屏幕上打印出This is a test字符串。




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