user-0 提问: 【c语言求助】文件的打开

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 引用 1 楼 弓长羊羽的回复:修改如下：  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<conio.h> void main() { 	int i, n = 0, m = 0, k, j; 	char c[101], a[101]; 	int paiming(int x); 	srand((unsigned)time(NULL)); 	j = 0; 	k = 0; 	for (i = 0; i<100; i++) 	{ 		a[i] = 97 + rand() % 25; 		printf("%c ", a[i]); 	}/*利用时间函数，随机生成100个小写字母*/ 	printf("\n"); 	gets(c); 	for (i = 0; (i<100) && (a[i] != '\0') && (c[i] != '\0'); i++) 	{ 		k = a[i] - c[i]; 		if (k == 0) n++; 	}/*获取输入字符，判断正误*/ 	j = paiming(n); 	m = 100 - n; 	printf("输入正确字母%d个，未输入正确%d个，您的成绩为%d，您的排名为%d\n", n, m, n, j); } int paiming(int x) { 	int s[100] = { -1 }, i, j, l = 0, t, k; 	FILE *fp; 	if ((fp = fopen("D:\\4\\1.dat", "w+")) == NULL) 	{ 		printf("无法打开排名数据文件\n"); 		return 0; 	}/*打开存放成绩的文件*/ 	fseek(fp, 0, SEEK_END);    //移动到最后   zx 	fprintf(fp, "%d ", x);/*将本次所得成绩记录进文件*/ 	//fclose(fp);/*关闭文件*/ 	//if ((fp = fopen("D:\\4\\1.dat", "r")) == NULL) 	//{ 	//	printf("无法打开排名数据文件\n"); 	//	return 0; 	//}/*打开存放成绩的文件*/ 	rewind(fp); 	l = 0; 	while (1) 	{ 		if (-1 != fscanf(fp, "%d", s + l)) break; 		l++; 	} 	for (i = 0; i<100; i++) 	{ 		if (s[i] != -1) 		{ 			fscanf(fp, "%d", s[i]); 			l++; 		}/*读取排名文件中所有成绩，存入数组中*/ 	} 	fclose(fp);/*关闭文件*/ 	for (j = 0; j < l; j++) 		for (i = j; i < l; i++) 			if (s[i]>s[i + 1]) 			{ 				t = s[i]; 				s[i] = s[i + 1]; 				s[i + 1] = t; 			}/*使用冒泡法对所有成绩进行排名*/ 	for (i = 0; i <= l; i++) 		if (s[i] == x) 			return i;    //k = i; 	return -1;/*给出本次成绩排名*/ }  谢谢，可以运行了，但是排名出来有问题，我第一次运行，结果出来排名99

user: user-0
content: 不要沉……

user: user-0
content: 引用 4 楼 leee7338的回复:[quote=引用 3 楼 oyoy111 的回复:] ……我怎么……没看懂你在说什么  难道不是文件访问失败么？[/quote] 我也不知道了，电脑一运行就报错，自动关闭

user: user-2
content: 引用 3 楼 oyoy111 的回复:……我怎么……没看懂你在说什么  难道不是文件访问失败么？

user: user-0
content: 引用 2 楼 leee7338的回复:文件路径或者文件权限导致的访问错误。 还有，建议打印的错误信息要清晰。 例： printf("错误_1\n"); printf("错误_2\n"); ……我怎么……没看懂你在说什么

user: user-2
content: 文件路径或者文件权限导致的访问错误。 还有，建议打印的错误信息要清晰。 例： printf("错误_1\n"); printf("错误_2\n");

user: user-3
content: 修改如下：  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<conio.h> void main() { 	int i, n = 0, m = 0, k, j; 	char c[101], a[101]; 	int paiming(int x); 	srand((unsigned)time(NULL)); 	j = 0; 	k = 0; 	for (i = 0; i<100; i++) 	{ 		a[i] = 97 + rand() % 25; 		printf("%c ", a[i]); 	}/*利用时间函数，随机生成100个小写字母*/ 	printf("\n"); 	gets(c); 	for (i = 0; (i<100) && (a[i] != '\0') && (c[i] != '\0'); i++) 	{ 		k = a[i] - c[i]; 		if (k == 0) n++; 	}/*获取输入字符，判断正误*/ 	j = paiming(n); 	m = 100 - n; 	printf("输入正确字母%d个，未输入正确%d个，您的成绩为%d，您的排名为%d\n", n, m, n, j); } int paiming(int x) { 	int s[100] = { -1 }, i, j, l = 0, t, k; 	FILE *fp; 	if ((fp = fopen("D:\\4\\1.dat", "w+")) == NULL) 	{ 		printf("无法打开排名数据文件\n"); 		return 0; 	}/*打开存放成绩的文件*/ 	fseek(fp, 0, SEEK_END);    //移动到最后   zx 	fprintf(fp, "%d ", x);/*将本次所得成绩记录进文件*/ 	//fclose(fp);/*关闭文件*/ 	//if ((fp = fopen("D:\\4\\1.dat", "r")) == NULL) 	//{ 	//	printf("无法打开排名数据文件\n"); 	//	return 0; 	//}/*打开存放成绩的文件*/ 	rewind(fp); 	l = 0; 	while (1) 	{ 		if (-1 != fscanf(fp, "%d", s + l)) break; 		l++; 	} 	for (i = 0; i<100; i++) 	{ 		if (s[i] != -1) 		{ 			fscanf(fp, "%d", s[i]); 			l++; 		}/*读取排名文件中所有成绩，存入数组中*/ 	} 	fclose(fp);/*关闭文件*/ 	for (j = 0; j < l; j++) 		for (i = j; i < l; i++) 			if (s[i]>s[i + 1]) 			{ 				t = s[i]; 				s[i] = s[i + 1]; 				s[i + 1] = t; 			}/*使用冒泡法对所有成绩进行排名*/ 	for (i = 0; i <= l; i++) 		if (s[i] == x) 			return i;    //k = i; 	return -1;/*给出本次成绩排名*/ }