现在正在完成一个学生管理系统,要求在菜单出现之前将文件中的内容读入内存,拿结构体存储的,文件结构如下:
04102001 // 学号
zhangsan // 姓名
80 // 成绩1
80 // 成绩2
我从文件中每次读一行,一次30个字符,直接复制给相应的变量了,会不会读取了空格?
请问如何解决 ! 在内存内容写入文件是是不是也需要转换 ?
04102001,zhangsan,80,80
04102001,"zhang san2",80,80
csv方式存储不是更好些
######求高手指点一二######呵呵 想过? 但是文件操作不熟,不知道咋提取,在C语言环境中######libcsv######细解啊?######个人推荐json格式 推荐json—c######细解啊 在C语言中######爪机无力 没法细节了。。。######回复 @openlinux : 手机打字不方便!######没法细解 ?######撸主找出空格的位置然后截断不就行了,同理如果用逗号来间开的话就strchr(string, ',')######要记得处理找不到的情况######Sqlite处理######楼主也就是写一个作业,楼上给的方案都太过了。楼主回去看一下课本,找一本C语言程序设计,好好看,你的作业是没问题的~!######呵呵,几个人一起做个简单管理系统,我负责数据读取,写入。我发现我这个不好弄######谢谢各位 指点 我最后发现了fgets读文件是正行 去除就行
#include <stdio.h> #include <Windows.h> #include <stdlib.h> #include <string.h> #define MAX_ARRLENGTH 20 #define SUCCESS 0 #define FAILURE -1 typedef struct { char acNum[20]; char acName[20]; char acAge[20]; char acSex[20]; int iEngScore; int iMathScore; int iTotalScore; }ST_STUDENT; ST_STUDENT g_Struct_Arr[MAX_ARRLENGTH]; int g_iNumber = 2; static int g_stuinfo = 7; int WriteToFile(); int AddInfo(); int ReadFromFile(); int DisAllInfo(); int DelInfo(); int SelectInfo(); int main() { ReadFromFile(); // AddInfo(); printf("over\n"); // DisAllInfo(); // DelInfo(); DisAllInfo(); SelectInfo(); Sleep(3000); return 0; } int SelectInfo() { char ctemp[20]; int icount=0; int flag = 0; printf("input Student id:\n"); scanf("%s",ctemp); printf("学号 姓名 年龄 性别 英语成绩 数学成绩 总分\n"); for(icount=0; icount<g_iNumber; icount++) { if ( 0 == (strcmp(g_Struct_Arr[icount].acNum,ctemp))) { flag = 1 ; printf("%s %s %s %s %d %d %d \n",g_Struct_Arr[icount].acNum, g_Struct_Arr[icount].acName,g_Struct_Arr[icount].acAge,g_Struct_Arr[icount].acSex, g_Struct_Arr[icount].iEngScore,g_Struct_Arr[icount].iMathScore,g_Struct_Arr[icount].iTotalScore); } } if ( 0 == flag) { printf("not find!\n"); } return 0; } int ReadFromFile() { FILE *pfHello; int i=0; int j=0; char cBuf[20]={}; pfHello = fopen("E:\hello.txt","r"); if (NULL == pfHello) { printf("open file failure!\n"); return FAILURE; } while (i<g_iNumber) { fgets(cBuf,20,pfHello); cBuf[strlen(cBuf)-1]=0; strcpy(g_Struct_Arr[i].acNum,cBuf); fgets(cBuf,20,pfHello); cBuf[strlen(cBuf)-1]=0; strcpy(g_Struct_Arr[i].acName,cBuf); fgets(cBuf,20,pfHello); cBuf[strlen(cBuf)-1]=0; strcpy(g_Struct_Arr[i].acAge,cBuf); fgets(cBuf,20,pfHello); cBuf[strlen(cBuf)-1]=0; strcpy(g_Struct_Arr[i].acSex,cBuf); fgets(cBuf,20,pfHello); g_Struct_Arr[i].iEngScore = atoi(cBuf); fgets(cBuf,20,pfHello); g_Struct_Arr[i].iMathScore = atoi(cBuf); fgets(cBuf,20,pfHello); g_Struct_Arr[i].iTotalScore = atoi(cBuf); i++; } fclose(pfHello); return SUCCESS; } int WriteToFile() { FILE *pfHello; int i=0; int j=0; pfHello = fopen("E:\hello.txt","w"); if (NULL == pfHello) { printf("open file failure!\n"); return FAILURE; } while (i < g_iNumber) { fprintf(pfHello,"%s",g_Struct_Arr[i].acNum); fputc('\n',pfHello); fprintf(pfHello,"%s",g_Struct_Arr[i].acName); fputc('\n',pfHello); fprintf(pfHello,"%s",g_Struct_Arr[i].acAge); fputc('\n',pfHello); fprintf(pfHello,"%s",g_Struct_Arr[i].acSex); fputc('\n',pfHello); fprintf(pfHello,"%d",g_Struct_Arr[i].iEngScore); fputc('\n',pfHello); fprintf(pfHello,"%d",g_Struct_Arr[i].iMathScore); fputc('\n',pfHello); fprintf(pfHello,"%d",g_Struct_Arr[i].iTotalScore); fputc('\n',pfHello); i++; } fclose(pfHello); printf("write to file over \n"); return 0; } int AddInfo() { int iFinal=0; //输入新同学的信息 printf("请输入学生的学号:\n"); scanf("%s",&g_Struct_Arr[g_iNumber].acNum); printf("请输入学生的姓名:\n"); scanf("%s",&g_Struct_Arr[g_iNumber].acName); printf("请输入学生的年龄:\n"); scanf("%s",&g_Struct_Arr[g_iNumber].acAge); printf("请输入学生的性别:\n"); scanf("%s",&g_Struct_Arr[g_iNumber].acSex); printf("请输入学生的英语成绩:\n"); scanf("%d",&g_Struct_Arr[g_iNumber].iEngScore); printf("请输入学生的数学成绩:\n"); scanf("%d",&g_Struct_Arr[g_iNumber].iMathScore); printf("english\n"); //计算总分 g_Struct_Arr[g_iNumber].iTotalScore=g_Struct_Arr[g_iNumber].iEngScore + g_Struct_Arr[g_iNumber].iMathScore; printf("he over!\n"); printf("%d\n",g_Struct_Arr[g_iNumber].iTotalScore); printf("added over !"); g_iNumber++; WriteToFile(); return 0; } int DisAllInfo() { int count; printf("学号 姓名 年龄 性别 英语成绩 数学成绩 总分\n"); for(count=0; count<g_iNumber; count++) { printf("%s %s %s %s %d %d %d \n",g_Struct_Arr[count].acNum,g_Struct_Arr[count].acName,g_Struct_Arr[count].acAge, g_Struct_Arr[count].acSex,g_Struct_Arr[count].iEngScore,g_Struct_Arr[count].iMathScore,g_Struct_Arr[count].iTotalScore); } return 0; } int DelInfo() { int iFinal=0; char iNum[20]; int j; int k; int flag = 0; printf("请输入你要删除的学生的学号:\n"); scanf("%s",iNum); for (j=0;j<g_iNumber;j++) { if ( 0 == strcmp(g_Struct_Arr[j].acNum,iNum)) { for (k=j;k<g_iNumber;k++) { g_Struct_Arr[k] = g_Struct_Arr[k+1]; flag = 1; } } } if ( 1 == flag) { printf("find ! delete !\n"); g_iNumber--; } else { printf("not find!\n"); } iFinal=WriteToFile(); return 0; } /* int MenuDisplay() { int iResult; int iChoice; while (1) { printf("Input 1 is for AddInfo.\n"); printf("Input 2 is for DelInfo.\n"); printf("Input 3 is for UpdateInfo.\n"); printf("Input 4 is for SelectInfo.\n"); printf("Input 5 is for DisAllInfo.\n"); printf("Input f for 女 and m for 男"); printf("Please input an integer to display any function:\n"); scanf("%d",&iChoice); while(getchar()!='n') switch(iChoice) { case 1: { iResult = AddInfo(); break; } case 2: { iResult = DelInfo(); break; } case 3: { // iResult = UpdateInfo(); break; } case 4: { // iResult = SelectInfo(); break; } case 5: { iResult= DisAllInfo(); break; } default: { printf("Invalid input."); exit(0); } } } return 0; } */
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。