• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

刚开始学者想写一个关于C的积分系统,涉及读取存储文件数据,目前仅仅实现积分的储存清除,求看看数据为何错乱

C语言 码拜 3年前 (2017-04-19) 203次浏览
可以运行但是数据错乱。
#include<stdio.h>
int main(){
FILE *fp;
int grade;
fp=fopen(“1.txt”,”grade”);
if(fp==NULL)                                                   //第一次打开无数据定义grade为0
{
printf(“无数据存储!\n”);
grade=0;
}
printf(”                        ******************************\n”);
printf(”                        *–欢迎进击的程序员–*\n”);
printf(”                        ******************************\n”);
printf(“1.存入积分 2.查看积分 3.积分清零\n”);
int i;
scanf(“%d”,&i);
if(i==1){
printf(“请输入要存取的积分!\n”);
int j;
scanf(“%d”,&j);
grade=grade+j;
fprintf(fp,”%d\n”,grade);
}
else if(i==2){
printf(“%d\n”,grade);
}
else if(i==3){
grade==0;
printf(“积分已清%d\n”,grade);
}
else{
printf(“输入错误!\n”);
}
fclose(fp);
return 0;
}
解决方案

30

#include<stdio.h>
int main() {
FILE *fp;
int grade;
int x;
fp = fopen(“1.txt”, “r+”);
if (fp == NULL) //第一次打开无数据定义grade为0
{
printf(“无数据存储!\n”);
grade = 0;
}
printf(”                        ******************************\n”);
printf(”                        *–欢迎进击的程序员–*\n”);
printf(”                        ******************************\n”);
printf(“1.存入积分 2.查看积分 3.积分清零\n”);
int i;
fscanf(fp, “%d”, &grade);
scanf(“%d”, &i);
if (i == 1) {
printf(“请输入要存取的积分!\n”);
int j;
scanf(“%d”, &j);
grade = grade + j;
remove(fp);
fp = fopen(“1.txt”, “w+”);
fprintf(fp, “%d”, grade);
}
else if(i == 2) {
printf(“%d\n”, grade);
}
else if(i == 3) {
grade = 0;
printf(“积分已清%d\n”, grade);
fprintf(fp, “%d”, grade);
}
else {
printf(“输入错误!\n”);
}
fclose(fp);
return 0;
}

50

1.你的fopen的打开模式不对,这里可以用a+
2.你查看积分的时候,应该用fscanf将存在文件里的数字读出来
3.你积分清零的时候,应该将文件给清空,而不仅仅是将grade变成0

#include<stdio.h>
int main(){
	FILE *fp;
	int grade = 0;
	fp = fopen("1.txt", "a+");
	if (fp == NULL)                                                   //第一次打开无数据定义grade为0
	{
		printf("无数据存储!\n");
		grade = 0;
	}
	printf("                        ******************************\n");
	printf("                        *--欢迎进击的程序员--*\n");
	printf("                        ******************************\n");
	printf("1.存入积分 2.查看积分 3.积分清零\n");
	int i;
	scanf("%d", &i);
	if (i == 1){
		printf("请输入要存取的积分!\n");
		int j;
		scanf("%d", &j);
		grade = grade + j;
		fprintf(fp, "%d\n", grade);
	}
	else if (i == 2){
		fscanf(fp, "%d", &grade);
		printf("%d\n", grade);
	}
	else if (i == 3){
		fclose(fp);
		fopen("1.txt", "w+");
		grade = 0;
		printf("积分已清%d\n", grade);
	}
	else{
		printf("输入错误!\n");
	}
	fclose(fp);
	return 0;
}

喜欢 (0)
[1034331897@qq.com]
分享 (0)