最后一步实现文件写入怎么做
本帖最后由 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();的目的是什么 FILE * f=fopen("stu.txt","w");
fprintf(f,"格式控制",参数列表); 你输入了学号和姓名之后应该会敲一下回车,那个getchar就是把这个回车读进去。 wihn 发表于 2021-12-20 20:16
fprintf(f,"格式控制",参数列表);
这个需要自己填写参数吗 Leon19960120 发表于 2021-12-20 20:50
fprintf(f,"格式控制",参数列表);
这个需要自己填写参数吗
这里的参数就把它当作printf()来填写就可以了。 如果我没记错的话
windows的回车包含两个控制字符 \n\r
getchar() 好像是接收 \r吧。(我也不太清楚了)
这个东西你试一试就知道了 本帖最后由 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; 用fprintf函数就可以把结构体写到文件里 本帖最后由 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的用法。
不太清楚 下载那这样在那样
页:
[1]
2