C语言成长学习题(十八)

86.新建名为d:\cwz\a1.txt的文本文件,调用fputc函数将输入的学生姓名,电话号码写到文件中,输入以#作为结束标志.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void main (void)
 5 {
 6     char ch;
 7     FILE *fp;
 8     
 9     fp = fopen("d:\\cwz\\a1.txt", "w");
10     if (fp == NULL)
11     {
12         printf("Can't open file!\n");
13         exit(0);
14     }
15     ch = getchar();
16     while (ch != '#')
17     {
18         fputc(ch, fp);
19         ch = getchar();
20     }
21     fclose(fp);
22 }
View Code

 

 87.调用fgetc函数,一次读取文件d:\cwz\a1.txt中的字符,并将它们显示在屏幕上.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void main (void)
 5 {
 6     char ch;
 7     FILE *fp;
 8     
 9     fp = fopen("d:\\cwz\\a1.txt", "r");
10     if (fp == NULL)
11     {
12         printf("Can't open file!\n");
13         exit(0);
14     }
15     ch = fgetc(fp);
16     while (ch != EOF)
17     {
18         putchar(ch);
19         ch = fgetc(fp);
20     }
21     fclose(fp);
22 }
View Code

  在C语言中,EOF的值为-1.由于文本文件中的字符均以ASCII代码形式存放,而ASCII代码没有-1值,因为只要不到文件尾,ch的值不会为-1,循环都将继续;一旦ch的值为-1,说明已读到文件尾,循环结束.

 

88.调用fputs函数在d:\cwz\a1.txt文件的尾部增写若干学生的姓名和电话号码,操作以输入空串作为结束.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 void main (void)
 6 {
 7     char a[80];
 8     FILE *fp;
 9     
10     fp = fopen("d:\\cwz\\a1.txt", "a");
11     if (fp == NULL)
12     {
13         printf("Can't open file!\n");
14         exit(0);
15     }
16     gets(a);
17     while (strcmp(a, "") != 0)
18     {
19         fputs(a, fp);
20         fputs("\n", fp);
21         gets(a);
22     }
23     fclose(fp);
24 }
View Code

 

89.调用fgets函数,读取d:\cwz\a1.txt文件中的学生信息,并将这些信息输出在屏幕上.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void main (void)
 5 {
 6     char a[80];
 7     FILE *fp;
 8     
 9     fp = fopen("d:\\cwz\\a1.txt", "r");
10     if (fp == NULL)
11     {
12         printf("Can't open file!\n");
13         exit(0);
14     }
15     
16     fgets(a, 80, fp);
17     while (feof(fp) == 0)
18     {
19     printf("%s", a);
20         fgets(a, 80, fp);
21     }
22     fclose(fp);
23 }
View Code

  fgets(a, 80, fp)的功能是从fp所指文件中,读入一行字符(最多79个)放入以a为地址的内存空间.

 

90.调用fwrite函数,将5名学生的姓名和学号写入二进制文件d:\cwz\c.dat.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct student
 5 {
 6     char name[20];
 7     int num;
 8 };
 9 
10 void main (void)
11 {
12     struct student tel[5] = {{"Jia", 8888}, {"Yi", 7777}, {"Bin", 6666}, {"Ding", 5555}, {"Wu", 4444}};
13     int i;
14     FILE *fp;
15     
16     fp = fopen("d:\\cwz\\c.dat", "wb");
17     if (fp == NULL)
18     {
19         printf("Can't open file!\n");
20         exit(0);
21     }
22     for (i = 0; i < 5; i++)
23     {
24         fwrite(tel+i, sizeof(struct student), 1, fp);
25     }
26 
27     fclose(fp);
28 }
View Code

  由于操作对象是一个二进制文件,所以应按fopen("d:\\cwz\\c.dat", "wb")形式打开文件.

  执行语句"fwrite(tel+i, sizeof(struct student), 1, fp);"后,从文件起始位置起,将数组tel中5个元素的有关数据一一写到文件中,其中tel+i,代表每个数据块所在的内存地址,用表达式sizeof(struct student)计算该数据块的字节数,数字1表示每次写1个数据块.

 

91.调用fread函数,按数据块方式从二进制文件d:\cwz\c.dat中读取数据,然后显示在终端屏幕上.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct student
 5 {
 6     char name[20];
 7     int num;
 8 };
 9 
10 void main (void)
11 {
12     struct student a;
13     int i;
14     FILE *fp;
15     
16     fp = fopen("d:\\cwz\\c.dat", "rb");
17     if (fp == NULL)
18     {
19         printf("Can't open file!\n");
20         exit(0);
21     }
22     for (i = 0; i < 5; i++)
23     {
24         fread(&a, sizeof(struct student), 1, fp);
25         printf("%s %d\n", a.name, a.num);
26     }
27 
28     fclose(fp);
29 }
View Code

Mark:

  在函数fread(&a, sizeof(struct student), 1, fp)中,第一个参数表示a的地址,第二个参数表示一次所读数据的字节数,第三个参数表示所读数据块数,第四个参数是文件指针.

  fwrite 和 fread 函数一般用于二进制文件.

  fseek函数: 移动位置指针到指定位置.SEEK_SET表示文件开始,SEEK_CUR表示文件当前位置,SEEK_END表示文件结尾.

  ftell函数: 获得当前位置指针的位置.

  rewind函数: 使位置指针回到文件的开头.

 

posted @ 2015-12-09 14:48  zer-o  阅读(223)  评论(0编辑  收藏  举报