8
回答
文件中的字符串处理问题 !求解
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

04102001   // 学号

zhangsan  // 姓名

80    // 成绩1

80    // 成绩2

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

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

 

 

 

举报
OscerSong
发帖于5年前 8回/262阅
共有8个答案 最后回答: 5年前
撸主找出空格的位置然后截断不就行了,同理如果用逗号来间开的话就strchr(string, ',')
--- 共有 1 条评论 ---
杨同学要记得处理找不到的情况 5年前 回复
楼主也就是写一个作业,楼上给的方案都太过了。楼主回去看一下课本,找一本C语言程序设计,好好看,你的作业是没问题的~!
--- 共有 1 条评论 ---
OscerSong呵呵,几个人一起做个简单管理系统,我负责数据读取,写入。我发现我这个不好弄 5年前 回复

谢谢各位  指点   我最后发现了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;
}

*/

顶部