user-0 提问: 模拟输出排行榜的程序。在文件读写的过程中出现错误。麻烦大家帮我看一下，多谢啦

回复:
user: user-0
content: 多谢你啦。我已经把程序改好了。在你的基础上做了一些修改。现在功能已经实现  引用 2 楼 zhangxiangDavaid 的回复:else 	{ 		//for (i = 1; i < NUM; i++) 		for (i = 0; i < NUM; i++) 		{ 			fgets(temp, MAX, fp);											//读文件第一行，即最高分数值  			int n = strlen(temp); 			temp[n - 1] = '\0';    //去除'\n' 			n--; 			//for (j = 0; (size_t)j < (strlen(temp)); j++)					//将数组str中的字符型数字转换成整型数字存放到数组a中  			for (j = 0; (size_t)j < n; j++) 			{ 				//str[j + 1] = (int)temp[j] - '0'; 				str[j] = (int)temp[j] - '0'; 			}  		//	sco[i] = str[i]; 			sco[i] = str[0];//此处应改为str[0] 			//for (j = 1; (size_t)j <= n; j++) 			for (j = 1; (size_t)j < n; j++)//此处不应有=，当数据只有一位的时候不乘以10. 			{ 				sco[i] = sco[i] * 10 + str[j]; 			} 		} [/code]

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:修改如下：  int Came_Over()                          //游戏结束 { 	int i, j; 	int str[NUM] = { 0 }; 	int sco[NUM] = { 0 }; 	char temp[MAX] = { 0 }; 	int flag = 1; 	int t = 0; 	FILE *fp = NULL;  	IMAGE img;	// 定义 IMAGE 对象  				//memset(sco,0,NUM * sizeof(int));  	loadimage(&img, ("E:\\Microsoft Visual Studio\\MyProjects\\Timberman\\Timberman\\sucai\\dead.jpg"));	// 读取图片到 img 对象中 	putimage(0, 0, &img);												// 在坐标 (0, 0) 位置显示 IMAGE 对象  	setcolor(WHITE); 	setfont(60, 0, _T("黑体")); 	outtextxy(35, 190, "ＧＡＭＥ　ＯＶＥＲ");  	fp = fopen("score.txt", "rt");									//读文件 	if (NULL == fp) 	{ 		printf("文件打开失败\n"); 		return -1;//要返回错误代码 	} 	else 	{ 		//for (i = 1; i < NUM; i++) 		for (i = 0; i < NUM; i++) 		{ 			fgets(temp, MAX, fp);											//读文件第一行，即最高分数值  			int n = strlen(temp); 			temp[n - 1] = '\0';    //去除'\n' 			n--;  			//for (j = 0; (size_t)j < (strlen(temp)); j++)					//将数组str中的字符型数字转换成整型数字存放到数组a中  			for (j = 0; (size_t)j < n; j++) 			{ 				//str[j + 1] = (int)temp[j] - '0'; 				str[j] = (int)temp[j] - '0'; 			}  			sco[i] = str[0]; 			for (j = 1; (size_t)j <= n; j++) 			{ 				sco[i] = sco[i] * 10 + str[j]; 			} 		}  		//for (i = 1; (size_t)i <= (strlen(temp)); i++) 		//{ 		//	sco[i] = str[i]; 		//	for (j = i + 1; (size_t)j <= (strlen(temp)); j++) 		//	{ 		//		sco[i] = sco[i] * 10 + str[j]; 		//	} 		//}  		fclose(fp);														//关闭文件  		//if (score <= sco[10]) 		if (score <= sco[9]) 		{ 			printf("太遗憾了，没有破纪录。\n"); 		} 		else 		{ 			printf("排行榜：\t\n"); 			//sco[10] = score; 			sco[9] = score;  			for (i = 1; i <= NUM - 1 && flag; i++)   //冒泡排序 			{ 				flag = 0; 				//for (j = 1; j <= NUM - i; j++) 				for (j = 0; j < NUM - i; j++) 					if (sco[j] < sco[j + 1]) 					{ 						t = sco[j]; 						sco[j] = sco[j + 1]; 						sco[j + 1] = t; 						flag = 1; 					} 			}  			//for (i = 1; i <= 10; i++) 			for (i = 0; i < 10; i++) 			{ 				printf("%d.%d\n", i + 1, sco[i]); 			}  			fp = fopen("score.txt", "wt");										//写文件 			//for (i = 1; i <= 10; i++) 			for (i = 0; i < 10; i++) 			{ 				fprintf(fp, "%d\n", sco[i]); 			} 			fclose(fp);														//关闭文件 		} 	} 	Photo_Close(); 	getch(); 	exit(0); }    有新的问题，之前存在文件中的数据每次重新运行之后都会乘以10。而且运行3次以后。3~10会被填充为别的数字。（数字是一样的。）

user: user-1
content: 修改如下：  int Came_Over()                          //游戏结束 { 	int i, j; 	int str[NUM] = { 0 }; 	int sco[NUM] = { 0 }; 	char temp[MAX] = { 0 }; 	int flag = 1; 	int t = 0; 	FILE *fp = NULL;  	IMAGE img;	// 定义 IMAGE 对象  				//memset(sco,0,NUM * sizeof(int));  	loadimage(&img, ("E:\\Microsoft Visual Studio\\MyProjects\\Timberman\\Timberman\\sucai\\dead.jpg"));	// 读取图片到 img 对象中 	putimage(0, 0, &img);												// 在坐标 (0, 0) 位置显示 IMAGE 对象  	setcolor(WHITE); 	setfont(60, 0, _T("黑体")); 	outtextxy(35, 190, "ＧＡＭＥ　ＯＶＥＲ");  	fp = fopen("score.txt", "rt");									//读文件 	if (NULL == fp) 	{ 		printf("文件打开失败\n"); 		return -1;//要返回错误代码 	} 	else 	{ 		//for (i = 1; i < NUM; i++) 		for (i = 0; i < NUM; i++) 		{ 			fgets(temp, MAX, fp);											//读文件第一行，即最高分数值  			int n = strlen(temp); 			temp[n - 1] = '\0';    //去除'\n' 			n--;  			//for (j = 0; (size_t)j < (strlen(temp)); j++)					//将数组str中的字符型数字转换成整型数字存放到数组a中  			for (j = 0; (size_t)j < n; j++) 			{ 				//str[j + 1] = (int)temp[j] - '0'; 				str[j] = (int)temp[j] - '0'; 			}  			sco[i] = str[0]; 			for (j = 1; (size_t)j <= n; j++) 			{ 				sco[i] = sco[i] * 10 + str[j]; 			} 		}  		//for (i = 1; (size_t)i <= (strlen(temp)); i++) 		//{ 		//	sco[i] = str[i]; 		//	for (j = i + 1; (size_t)j <= (strlen(temp)); j++) 		//	{ 		//		sco[i] = sco[i] * 10 + str[j]; 		//	} 		//}  		fclose(fp);														//关闭文件  		//if (score <= sco[10]) 		if (score <= sco[9]) 		{ 			printf("太遗憾了，没有破纪录。\n"); 		} 		else 		{ 			printf("排行榜：\t\n"); 			//sco[10] = score; 			sco[9] = score;  			for (i = 1; i <= NUM - 1 && flag; i++)   //冒泡排序 			{ 				flag = 0; 				//for (j = 1; j <= NUM - i; j++) 				for (j = 0; j < NUM - i; j++) 					if (sco[j] < sco[j + 1]) 					{ 						t = sco[j]; 						sco[j] = sco[j + 1]; 						sco[j + 1] = t; 						flag = 1; 					} 			}  			//for (i = 1; i <= 10; i++) 			for (i = 0; i < 10; i++) 			{ 				printf("%d.%d\n", i + 1, sco[i]); 			}  			fp = fopen("score.txt", "wt");										//写文件 			//for (i = 1; i <= 10; i++) 			for (i = 0; i < 10; i++) 			{ 				fprintf(fp, "%d\n", sco[i]); 			} 			fclose(fp);														//关闭文件 		} 	} 	Photo_Close(); 	getch(); 	exit(0); }

user: user-2
content: 你这个为什么循环里面好多数组下标都是从1开始的，你查查看是不是这个原因。