首页 > 技术文章 > C语言入门:结构体+文件的应用

ZJ-CN 2020-02-11 12:12 原文

 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 void main()
 4 {
 5      //使用文件的操作 步骤
 6      //1.定义文件指针变量
 7      char name[100];
 8      FILE *fp;
 9      //2.打开文件
10      fp= fopen("E:\\八维.doc","w");
11      //3.判断这个文件是否打开。
12      if(fp==NULL)//这个指针指向的位置 是空的。
13      {
14          printf("error");
15      }
16      //4.读/写操作(核心)这里 写里放任何学过的东西。只要类型对,可以存里
17      printf("请输入一段话:");
18      scanf("%s",name);
19      fprintf(fp,"俊哥刚才写的内容为:%s",name);//往文件里 输出内容。意思:就是往文件写内容
20      //5.关闭文件
21      fclose(fp);
22      //6.关闭程序
23      exit(0);
24 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 struct student  // ① 定义结构体类型变量存放学生信息
 4 {
 5     //内部成员
 6     char name[100];//姓名
 7     int id;//学号
 8     int cj;//C语言成绩
 9 }stu[3];//学生数组
10 void main()
11 {
12     //编程实现,从键盘录入3个学生的信息,
13     //包括姓名,学号,C语言成绩,并将这些数据打印到控制台。 输出到空
14     //数据录入后,将学生信息写入文件中,文件名为“import_student.txt”。
15    // ② 定义文件指针
16    FILE *fp;
17    int i;//循环变量
18    // ③ 提示输入学生信息
19    printf("提示输入学生信息\n");
20    for(i=0;i<3;i++)
21    {
22        printf("第%d个学生的姓名:",i+1);
23        scanf("%s",stu[i].name);
24        printf("第%d个学生的学号:",i+1);
25        scanf("%d",&stu[i].id);
26        printf("第%d个学生的C语言成绩:",i+1);
27        scanf("%d",&stu[i].cj);
28    } 
29    // ④ 提示输出学生信息 
30     for(i=0;i<3;i++)
31    {
32        printf("第%d个学生的姓名:%s,学生的学号:%d,学生的C语言成绩:%d\n",i+1,stu[i].name,stu[i].id,stu[i].cj);
33    } 
34    // ⑤ 正确将学生信息写入文件中
35    // ⑥ 打开文件
36    fp=fopen("E:\\18单元练习手册.doc","w");
37    // ⑦ 判断是否正确打开文件
38    if(fp==NULL)
39    {
40         printf("没有找到文件,error\n");
41    }
42    // ⑧ 将数据写入文件中
43     for(i=0;i<3;i++)
44    {
45        fprintf(fp,"第%d个学生的姓名:%s,学生的学号:%d,学生的C语言成绩:%d\n",i+1,stu[i].name,stu[i].id,stu[i].cj);
46    } 
47    // ⑨ 关闭文件 
48    fclose(fp);
49 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 #include "string.h"//字符串头文件
 4 #include "windows.h"//系统头文件
 5 struct team  //① 定义结构体数组,正确定义变量
 6 {
 7     char name[100];//员工
 8     int yj;//业绩
 9 }t[3];   //③ 正确定义结构体(用来存放员工的姓名和业绩绩点)
10 void main()
11 {
12    //存储一个团队3名员工的姓名和业绩绩点,然后输入一个员工的姓名,
13    //查找该人是否为团队的成员,如果是提示是团队成员,
14    //同时输出该员工的业绩绩点,如果不是提示不是团队成。
15    //要求:将查找到的员工信息写入到 D盘下文件夹名为staff的staff_inform.txt文件中(如果没有D盘,可以写在别的盘中) 
16    //② 正确定义变量,数组,指针变量等
17    int i,maxb=0,max;//最大下标  最大业绩
18    char cz[100];//姓名
19    FILE *fp;//文件
20    int sf;//是否查找 
21    //④ 定义结构体变量存储一个团队的3个员工的信息,利用循环赋值
22    for(i=0;i<3;i++)
23    {
24         printf("请输入第%d员工的姓名:",i+1);
25         scanf("%s",t[i].name);
26         printf("请输入第%d员工的业绩:",i+1);
27         scanf("%d",&t[i].yj);
28    }
29    max=t[0].yj;
30    //⑤ 比较三名员工的业绩绩点,输出绩点最高的员工信息
31    for(i=0;i<3;i++)
32    {
33         if(max<t[i].yj)
34         {
35             max=t[i].yj; //把最大值 赋值过来
36             maxb=i;//把最大值下标 赋值过来
37         } 
38    }
39    printf("输出绩点最高的员工信息:姓名为:%s,业绩绩点为:%d\n",t[maxb].name,t[maxb].yj);
40    //⑥ 提示输入要查找的姓名
41    for(;;)//⑨ 询问是否继续查找,是则继续,否则退出程序
42    { 
43    printf("提示输入要查找的姓名:");
44    scanf("%s",cz);
45    //⑦ 判断是否是该团队的员工,并输出正确的结果
46    fp=fopen("E:\\staff\\staff_inform.txt","w");
47    if(fp==NULL)
48    {
49        printf("没有找到该文件,error\n");
50    }
51     for(i=0;i<3;i++)
52    {
53          if(strcmp(cz,t[i].name)==0)//查找。就是循环比较。
54          {
55              printf("该员工找到了姓名为:%s,业绩绩点为:%d\n",t[i].name,t[i].yj);
56              //⑧ 如果要查找的员工是该团队员工,要求将员工信息写入到 D盘下文件夹名为staff的staff_inform.txt文件
57              fprintf(fp,"该员工找到了姓名为:%s,业绩绩点为:%d\n",t[i].name,t[i].yj);
58          }
59    }
60     printf("是否继续查找:");
61     scanf("%d",&sf);
62     if(sf==0)//⑨ 询问是否继续查找,是则继续,否则退出程序
63     {
64         exit(0);
65     }  
66    }
67    
68   
69 }

 

 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 #include "windows.h"//头文件
 4 struct student   //① 正确定义结构体(用来存放学生的数据)
 5 {
 6     int id; //学号
 7     char name[100];//姓名
 8     int age; //年龄
 9     char adr[100]; //家庭地址 
10 }stu[2];
11 void main()
12 {
13     //编程实现如下功能:
14     //从键盘输入两个学生数据(学号,姓名,年龄,家庭地址),
15     //写入一个文件中,再读出这两个学生的数据显示在屏幕上。? fprintf(fp,"",);
16     //要求:将学生数据存储在D盘文件夹stu_infor下的stu_infor.txt里。
17     //(没有D盘,可以自己指定位置)
18     // 
19     //② 在主函数中正确定义变量,指针,以及结构体变量
20     int i;//下标
21     FILE *fp;//1.文件指针    6
22     //  write 写入,如果没有该文件,它会创建一个。
23     //  append   r
24     //2.利用指针文件  指向 该文件。
25     fp=fopen("E:\\stu_infor\\stu_infor.txt","w");
26     //3.判断是否打开文件
27     if(fp==NULL)//NULL 为空的意思
28     {
29         printf("提示没有找到error.");
30         exit(0);//没有找到的时候 ,直接退出程序
31     }
32     //③ 通过循环输入2个学生信息
33     for(i=0;i<2;i++)
34     {
35         printf("输入第%d个学生的学号:",i+1);
36         scanf("%d",&stu[i].id);
37         printf("输入第%d个学生的姓名:",i+1);
38         scanf("%s",stu[i].name);
39         printf("输入第%d个学生的年龄:",i+1);
40         scanf("%d",&stu[i].age);
41         printf("输入第%d个学生的家庭地址:",i+1);
42         scanf("%s",stu[i].adr);
43     }
44     //④ 写入txt文件中
45      for(i=0;i<2;i++)
46     {
47         fprintf(fp,"第%d个学生的学号:%d,姓名:%s,年龄:%d,家庭地址:%s\n",i+1,stu[i].id,stu[i].name,stu[i].age,stu[i].adr);
48     }
49     //⑤ 再从文件中读取出学生的数据,并在屏幕上显示 (问题)
50       for(i=0;i<2;i++)
51     {
52         printf("第%d个学生的学号:%d,姓名:%s,年龄:%d,家庭地址:%s\n",i+1,stu[i].id,stu[i].name,stu[i].age,stu[i].adr);
53     }
54 }
55  
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 #include "windows.h"
 4 void main()
 5 {
 6      //利用文件 实现 一维数组的所有操作。
 7      //一维数组的所有操作 都可以写在文件里。
 8      //比如 输入  输出 平均  最大  最小  奇偶数。
 9      
10      //实现文件的步骤
11      //1.定义文件指针
12      FILE *fp;
13      int a[5],i,max,min,sum=0;//定义的一维数组
14      //2.打开文件 建立指针与文件的关系
15      fp=fopen("E:\\12号上午文件.doc","w");//w只写  w+ 读写
16      //3.判断是否打开文件   没有的话直接结束程序
17      if(fp==NULL)
18      {
19          printf("error,没有找到!\n");
20          exit(0);
21      }
22      //4.文件的读写
23      for(i=0;i<5;i++)
24      {
25       printf("请输入一个数:");
26       scanf("%d",&a[i]);
27       sum=sum+a[i];//求总和 和平均分 
28      }
29      printf("一维数组的内容为:\n");
30      for(i=0;i<5;i++)
31      {
32       printf(" %d ", a[i]); //打印到屏幕上
33       fprintf(fp," %d ", a[i]);//往文件里 打印内容
34      }
35      printf("数组的总分为:%d,平均分为:%.2f\n",sum,(float)sum/5);
36      fprintf(fp,"数组的总分为:%d,平均分为:%.2f",sum,(float)sum/5);
37      //给最大值 最小值 变量 赋初始值
38      max=min=a[0];
39      //数组的最大值  最小值
40      for(i=0;i<5;i++)
41      {
42          if(max<a[i])
43          {
44            max=a[i];    
45          }
46          if(min>a[i])
47          {
48            min=a[i];
49          }
50      }
51      printf("数组的最大值为:%d,最小值为:%d\n",max,min);
52      fprintf(fp,"数组的最大值为:%d,最小值为:%d\n",max,min);
53      //5.文件的关闭。 
54      fclose(fp); 
55 }
 1 /* Note:Your choice is C IDE */
 2 #include "stdio.h"
 3 #include "windows.h"
 4 void main()
 5 {
 6    // 数组int a[10]={623,970,407,229,821,371,537,370,334,101},
 7    // 求数组所有元素为偶数的个数,
 8    // 下标为奇数元素的平均值,
 9    // 数组中为水仙花数的元素下标、
10    // 数组中值最大的元素下标。
11    //(水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。
12    // 例如:    1^3 + 5^3+ 3^3 = 153)
13  
14    //① 正确定义变量和数组
15    FILE *fp;
16    int a[10]={623,970,407,229,821,371,537,370,334,101};
17    // 下标     0    1   2  3   4   5   6   7   8   9
18    int i,j=0,ou=0,jsum=0,max,maxb=0;//循环变量  ou偶数 jsum奇数总和   maxb为最大值下标
19    int g,s,b;//个 十  百
20    fp=fopen("E:\\一维数组.doc","w");//建立文件的关系 打开文件
21    if(fp==NULL)
22    {
23        printf("没有找到,error!\n");
24        exit(0);//退出系统
25    }
26    //② 往文件里打印计算数组中偶数的个数还要输出到屏幕上
27    for(i=0;i<10;i++)
28    {
29         if(a[i]%2==0)
30         {
31             ou++;//计数 
32         }
33    }
34    printf("偶数的个数:%d\n",ou);
35    fprintf(fp,"偶数的个数:%d\n",ou);
36    //③ 往文件里打印计算下标为奇数元素的平均值    还要输出到屏幕上
37     for(i=0;i<10;i++)
38    {
39         if(a[i]%2==1)
40         {
41              jsum=jsum+a[i];
42              j++;
43         }
44    }
45    printf("奇数的总和:%d,平均分为:%.2f\n",jsum,(float)jsum/j);
46    fprintf(fp,"奇数的总和:%d,平均分为:%.2f",jsum,(float)jsum/j);
47    //④ 往文件里打印输出数组中为水仙花数的元素下标   还要输出到屏幕上
48    for(i=0;i<10;i++)
49    {
50         g=a[i]%10;  //120   20   0  个
51         s=a[i]/10%10;         //120   12 %10  2  十 
52         b=a[i]/100; 
53         if(g*g*g+s*s*s+b*b*b == a[i]) //每一位的立方的结果 想加 等于 它本身
54         {
55             printf("该水仙花数为:%d,下标为:%d\n",a[i],i);
56             fprintf(fp,"该水仙花数为:%d,下标为:%d\n",a[i],i);
57         }
58    }
59    
60    //⑤ 往文件里打印数组中值最大的元素下标    还要输出到屏幕上
61    max=a[0];//赋值第一个元素
62    for(i=0;i<10;i++)
63    {
64        if(max<a[i])
65        {
66            max=a[i];
67            maxb=i;
68        }
69    }
70    printf("数组中最大值的元素:%d,下标:%d\n",max,maxb);
71    fprintf(fp,"数组中最大值的元素:%d,下标:%d\n",max,maxb);
72    //⑥ 往文件里打印输出所有数组元素值       还要输出到屏幕上
73    printf("数组中的元素为:\n");
74    for(i=0;i<10;i++)
75    {
76         printf(" %d ",a[i]);
77         fprintf(fp," %d ",a[i]); 
78    }
79 }

 

推荐阅读