- 在线时间
- 490 小时
- 最后登录
- 2024-2-3
- 注册时间
- 2013-2-28
- 听众数
- 117
- 收听数
- 46
- 能力
- 268 分
- 体力
- 39235 点
- 威望
- 1340 点
- 阅读权限
- 255
- 积分
- 31237
- 相册
- 2
- 日志
- 0
- 记录
- 0
- 帖子
- 1388
- 主题
- 937
- 精华
- 0
- 分享
- 0
- 好友
- 111
升级   0% TA的每日心情 | 衰 2020-10-25 11:55 |
|---|
签到天数: 264 天 [LV.8]以坛为家I
- 自我介绍
- 内蒙古大学计算机学院
 群组: 2013年数学建模国赛备 |
该函数包含在C语言中的stdio.h头文件中,主要功能是从流中读取一个字符,并增加文件指针的位置。! H; ^6 C V' c3 S. T
8 C7 K' q; c4 s! G8 V0 [( X8 ?函数原型:int fgetc(FILE *fp);
$ g' f" R, C% x h- Y& f f4 d. w C/ J0 J# [) e5 v5 D
函数功能:从流中读取字符,即从fp所指定的文件中取得下一个字符。这里需要注意,在每取完一个字符时fp会自动向下移动一个字节。这样编成时,程序员就不用再对fp控制了。这种功能在许多读写函数中都有体现。* m5 b: L0 M' \9 a! E0 t8 Y. h
+ q9 Y- F$ V g' |% o/ p9 S返回值:返回所得到的字符;若读入错误,返回EOF。
% r6 Q2 {, G+ C* R6 O9 }! H
" o8 ` u8 r! i3 {" S1 d. Z下面用一个具体的例子来说明:
/ d# C! ~; J' o# U7 a, ^( ?3 k
#include <stdio.h>- [% B' l/ k) ?" Y0 I; k; V6 t( ?2 s( t
#include <stdlib.h>" p V7 J6 C4 ]% O$ w% |
3 `# y& E; [% |1 }
int main(int argc, char *argv[])9 P7 T/ y" i, h. [& v- H5 U
{
3 J+ ]* C: [" j+ a, r1 K+ l FILE *fp;
3 E9 f: m7 M& L4 t6 z char ch;
! t$ n m+ N l) f+ L
: d9 o- D6 i8 W4 }$ H- e7 Y* k2 u if((fp=fopen("test","r"))==NULL) {
9 c t4 F# ]3 _ printf("Cannot open file.\n");
4 k* ~! j; D" f6 ]- ~# z8 v' B# ~7 g exit(1);
6 A# D0 Q+ Q w9 g+ ` }
& p# w0 K& t+ u8 x I# t* {
5 M9 E% l0 ]! i6 ] [' e while((ch=fgetc(fp)) != EOF) {6 ]4 E4 U# y$ J$ P2 H- X
printf("%c", ch);
& u2 g4 m y9 b }; h. t, ?& k) X0 E( J
fclose(fp);4 l3 ?, L0 |$ z6 ]3 d$ D
* {: N* s- I$ f' H* m6 V9 Q2 G6 P return 0;
4 B: W+ b) j; M' F } [4 h. g9 l: n) F( [0 N+ d o. n; K# q+ q
/ }0 M. I' X# W P4 L' x/ a 下面给出另外一个例子:6 ^2 F* \9 V* _3 u
* k' ]( u( L2 C( ]. x. _' Z#include <string.h>3 ]; j: Z3 v0 o+ d8 U( [
#include <stdio.h>1 ]+ s' `3 R k4 w0 I
#include <conio.h> M: A& a1 a: t4 |1 k5 ^, Z
e" p* `% e# X7 x( i* {; N
( P8 C- J* ]0 _
int main(void)* P2 P. g9 {9 G4 j: N, j' W. c
{4 h% v8 A1 V8 V% i$ L( v
FILE *fp;
+ s; [# j5 m) \) `: @& Y; N char string[] = "This is a test";
7 V1 \: o. b8 \2 s# s char ch; 9 i+ V; I) l$ f# v
/* 以读写方式打开一个名为test.txt的文件 */; l. I% D( U' \. A+ ^. U
fp = fopen("test.txt", "w+"); + h& J2 Q- N, R/ r* Z
/* 向文件中写入字符串string */9 F2 ]4 [# {' B; v, j3 H5 @% x+ n- n
fwrite(string, strlen(string), 1, fp);
( Z1 ]2 _, {. X3 C2 f /* 将fp指针指向文件首 */
, v1 \9 K5 [4 _5 ^" i/ O fseek(fp, 0, SEEK_SET);
5 I$ b/ s6 G+ J5 h' X. e: q do , e7 q, C, `2 k' ^* Q2 M+ i5 g
{
% A% o: O- P$ p; J+ @- m! m+ G /* 从文件中读一个字符 *// g9 y0 N! e. c' l: A: p2 L; t S
ch = fgetc(fp);
8 ~9 v/ j2 C* _' y- H /* 显示该字符 */
% L- S. B0 ?7 B6 Q# h; p putch(ch); 0 t3 e2 w( a! {! @8 K
} while (ch != EOF); 4 L* E3 v2 X8 F3 j) y
fclose(fp); ; c+ v C. q/ x8 }1 q
return 0;
% c( a. t5 [- B5 ?/ u }( O& t' \5 T% U6 z0 B) t, f" f' q
( v) c% F* v# q5 d
例程说明:, n) F/ d2 k W4 ~: j9 Q
1 P# ^; J+ B6 z6 F. w; ?4 G; x
(1)首先程序先以读写方式打开一个名为test.txt的文件,并向该文件中写入一个字符串。
: n; [2 R( p0 h2 k6 ?
! e8 ]: E6 v" [* R(2)再应用fseek函数将文件指针fp定位在文件的开头,再循环地将字符逐一读出。这里每读出一个字符,指针fp会自动地向后移一个字节,直至读到文件尾,即EOF标志,循环才停止。因为fgetc函数的返回值为得到的字符,所以用一个字符型变量ch 来接受读出的字符。
5 b' n- P) k" g1 Z2 {3 `9 D/ L
+ j' L6 D# k4 D(3)最后的运行结果是在屏幕上打印出This is a test字符串。 |
zan
|