开发者社区> 问答> 正文

文件中的字符串处理问题 !求解:报错

现在正在完成一个学生管理系统,要求在菜单出现之前将文件中的内容读入内存,拿结构体存储的,文件结构如下:

04102001   // 学号

zhangsan  // 姓名

80    // 成绩1

80    // 成绩2

我从文件中每次读一行,一次30个字符,直接复制给相应的变量了,会不会读取了空格?

请问如何解决 !  在内存内容写入文件是是不是也需要转换 ?

 

 

 

展开
收起
kun坤 2020-06-07 14:42:19 514 0
1 条回答
写回答
取消 提交回答
  • 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;
    }
    
    */

    2020-06-07 14:42:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载