Leon19960120 发表于 2021-12-20 20:08

最后一步实现文件写入怎么做

本帖最后由 Leon19960120 于 2021-12-20 20:11 编辑

请使用该结构体,编写一个简单的程序,要求输入60个学生的学号、姓名、中文成绩,数学成绩后,计算出该同学的总分。然后把这60个学生的学号、姓名、中文成绩,数学成绩和总分保存到stu.txt文件中。#include<stdio.h>
#define N 1
struct student
{
      intNum;          /*学号*/
                char Name;   /*姓名*/
                float Chinese;   /*中文成绩*/
                float Math;       /*数学成绩*/
                float Tscore;   /*总分*/

};
int main()
{
      struct student stu;
      int i; float ave = 0;
      printf("请输入学生学号、姓名、中文成绩和数学成绩:\n");


      for (i = 0; i < N; i++)
      {
                scanf("%d%s", &stu.Num, stu.Name);
                getchar();
                scanf("%f%f", &stu.Chinese, &stu.Math);
                stu.Tscore = stu.Chinese + stu.Math;
         printf("%.2f\n", stu.Tscore);
      }
return 0;
}

还有问一下代码中的getchar();的目的是什么

wihn 发表于 2021-12-20 20:16

FILE * f=fopen("stu.txt","w");
fprintf(f,"格式控制",参数列表);

wihn 发表于 2021-12-20 20:17

你输入了学号和姓名之后应该会敲一下回车,那个getchar就是把这个回车读进去。

Leon19960120 发表于 2021-12-20 20:50

wihn 发表于 2021-12-20 20:16


fprintf(f,"格式控制",参数列表);
这个需要自己填写参数吗

wihn 发表于 2021-12-20 21:02

Leon19960120 发表于 2021-12-20 20:50
fprintf(f,"格式控制",参数列表);
这个需要自己填写参数吗

这里的参数就把它当作printf()来填写就可以了。

小能维尼 发表于 2021-12-20 22:35

如果我没记错的话
windows的回车包含两个控制字符 \n\r
getchar() 好像是接收 \r吧。(我也不太清楚了)
这个东西你试一试就知道了

Joe1921567817 发表于 2021-12-20 23:45

本帖最后由 Joe1921567817 于 2021-12-20 23:50 编辑

今天刚刚好C语言实验课写的就是这个{:301_997:}这是我们的代码,结构体大同小异,还有就是arrTeacher改成stu,nTeacher改成N
不过我们用的是iostream和fstream,可能要改一下,仅供参考{:301_1004:}

https://static.52pojie.cn/static/image/hrline/5.gif

至于getchar();我个人猜测可能是为了清空输入缓冲区
scanf() 的缓冲区有时会引发奇怪的问题,多个 scanf() 之间要注意清空缓冲区。清空缓冲区主要有两种思路:一是将缓冲区中的数据丢弃,二是将缓冲区中的数据读取出来,但是却不使用。
参考:https://blog.csdn.net/weixin_42528287/article/details/85957394

https://static.52pojie.cn/static/image/hrline/5.gif

代码如下:
这两行加在开头:
#include <fstream>
#include <iostream>
主要代码部分:
    char fileName[]="stu.txt"; //要保存的文件的名称
    ofstream fout(fileName);//打开文件以供写入
    if (!fout)//处理打开失败的情况(打开失败则fout变量值为空)
    {
      cout << "文件打开失败!" << endl;
      system("pause"); // 等待按任意键后关闭运行窗口
      return 0;          // 返回
    }
    for (int i = 0; i <= nTeacher-1; i++)//遍历整个数组,逐行写出每一条记录
    {
      fout << "第" << i+1 << "位老师信息:" << endl;
      fout << "姓名:\t\t" << arrTeacher.name << endl;
      fout << "学号:\t\t" << arrTeacher.no << endl;
      fout << "密码:\t\t" << arrTeacher.password << endl;
      fout << "性别(0为女,1为男):\t" << arrTeacher.sex << endl;
      fout << "生日:" << endl;
      fout << "年:\t\t" << arrTeacher.birthday.year << endl;
      fout << "月:\t\t" << arrTeacher.birthday.month << endl;
      fout << "日:\t\t" << arrTeacher.birthday.day << endl;
      fout << "学历:\t\t" << arrTeacher.education << endl;
      fout << "职称:\t\t" << arrTeacher.academicTitle << endl;
      fout << "电话:\t\t" << arrTeacher.telephone << endl;
      fout << "E_mail:\t\t" << arrTeacher.e_mail << endl;
      fout << "QQ号:\t\t" << arrTeacher.qq << endl << endl;
    }
    fout.close();//关闭文件
    cout<<"写出已完成。"<<endl;

detewhkn 发表于 2021-12-21 00:58

用fprintf函数就可以把结构体写到文件里

liyitong 发表于 2021-12-21 09:09

本帖最后由 liyitong 于 2021-12-21 09:11 编辑

#include <stdio.h>
#include <stdlib.h>

int main()
{
   FILE * fp;

   fp = fopen ("file.txt", "w+");
   fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);
   
   fclose(fp);
   
   return(0);
}
第09行。printf是把信息输出到cmd中,fprintf是把内容输出到文件中。
相对于printf来讲,fprintf的第一个参数是要写入的文件的指针,后面的就是完全的printf的用法。

hhhsssssshhh 发表于 2021-12-21 11:40

不太清楚 下载那这样在那样
页: [1] 2
查看完整版本: 最后一步实现文件写入怎么做