现在正在完成一个学生管理系统,要求在菜单出现之前将文件中的内容读入内存,拿结构体存储的,文件结构如下:
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;
}
*/