文件操作1
#include <stdio.h>#include <stdlib.h>
#define max 10
typedef struct student stu;
struct student
{
char num;
char name ;
int s1,s2,s3;
};
void Printmnue();
void readdata(FILE *fp,stu s,int *n);
void writedata(FILE *fp,stu,int n);
int main()
{
int choice;
int i,n;
stu s;
char yorn;
FILE *fp;
fp=fopen("学生信息.txt","r");
if(fp==NULL)
{
printf("文件打开失败\n");
exit (0);
}
else
readdata(fp,s,&n);
for(i=0;i<n;i++)
{
printf("%s %s %d %d %d\n",s.num ,s.name ,s.s1 ,s.s2 ,s.s3 );
}
fclose(fp);
while (1)
{
Printmnue();
printf("请输入你的选择(1-7)\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
{
exit(0);
break;
}
}
char YesOrNo;
YesOrNo =getchar() ;
if (YesOrNo == 'y' || YesOrNo == 'Y')
continue;
else
break;
}
system("pause");
return 0;
}
void Printmnue()
{
printf("1.添加学生数据\n");
printf("2.删除数据\n");
printf("3.排序\n");
printf("4.成绩查询\n");
printf("5.更改学生数据\n");
printf("6.显示学生信息\n");
printf("7.退出\n");
}
一个学生成绩系统的框架,学生信息数据已经在路径中提前保存好了,txt格式如下:
001 王一 98 99 85
002 王二 95 78 99
003 王三 85 86 88
004 王四 94 86 82
请问怎么调用函数readdata,能把数据对应读到结构体中,然后用printf函数打印出来呢?T T void readdata(FILE *fp,stu s,int *n)
{
for(int i=0;fscanf(fp,"%s%s%d%d%d",s.num,s.name,s.s1,s.s2,s.s3)!=EOF&&i<10;i++)
;
} 看一下这个吧https://blog.csdn.net/xiaopang_yan/article/details/51956405,我也不太清楚,文件我不太懂 每一条记录的区分都是以'\n'为准的,字段与字段间也是通过空格划分的;
整个文件结束以EOF为标志。
所以思路可以通过文件内容中换行符的判断实现每条记录读取,通过空格【或换行符(单条记录最后一个字段)或结束符EOF(最后那个可能是EOF)]判断单个字段的长度,
写入对应结构体即可,还有注意点:数值如果是字符型就需要进行一定手段转换;比如通过数组暂存然后按位取出按照ASCII码转换,按权相加再赋值 ifstream ifs(_F_STOCK); //输入方式打开文件
char buf = {0};
ls.clear();
//取出表头
ifs.getline(buf, sizeof(buf));
while(!ifs.eof()) //没到文件结尾
{
student tmp;
ifs.getline(buf, sizeof(buf)); //读取一行
char *sst = strtok(buf, "|"); //以"|"分隔
if(sst != NULL)
{
num = sst;
}
else
{
break;
}
sst = strtok(NULL, "|");
tmp.name = sst; //名字
sst = strtok(NULL, "|");
tmp.s1 = atoi(sst);
sst = strtok(NULL, "|");
tmp.s2 = atoi(sst);
sst = strtok(NULL, "|");
tmp.s3 = atoi(sst);
ls.push_back(tmp); //放在链表的后面
}
这是我以前写的读取文件,你可以试着参考一下,我文件里各项是用“|”分隔的,所以strtok里的第二个参数是“|”,你的是空格,所以用空格就行 上面那个是在我原来的代码的基础上按你的需求改了一下内容,但不是完全适用
页:
[1]