user-0 提问: 菜鸟求助？C 写入信息到文件的

回复:
user: user-1
content: 根据你的想法猜测，你的 for 循环应该这样写  for (i = 0; i < n; i++) {     printf("input %d:", i + 1);     scanf("%d %s", &infor.num, infor.name);     fprintf(fp, "%d %s\n", infor.num, infor.name); }

user: user-2
content: 引用 8 楼 linbounconstraint 的回复:[quote=引用 7 楼 lipoor1234 的回复:] [quote=引用 5 楼 linbounconstraint 的回复:] [quote=引用 1 楼 user-6 的回复:] [quote=引用 楼主 linbounconstraint 的回复:] 先输入要写入多少人，然后输入学号，名字，保存信息到.txt 里面。 #include <stdio.h> struct stu { 	int num; 	char name[]; }; int main() { 	FILE * fp; 	struct stu infor; 	int n, i; 	fp = fopen("student.txt", "w+"); 	if(fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &(infor).num, (infor).name); 		fwrite(&infor, sizeof(infor), 1, fp); 		 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }  [cxl@chenxiaolei ~]$ gcc -Wall  main.c -o main  [cxl@chenxiaolei ~]$ ./main input all student number  2 input the num and name like:03 jim the NO1: 03 sam 段错误 (core dumped) [cxl@chenxiaolei ~]$  好歹给name一个存储空间，^_^. #include <stdio.h>  #define NAME_LEN 100  struct stu { 	int num; 	char name[NAME_LEN]; };  int main() { 	FILE * fp; 	struct stu infor; 	int n, i;  	fp = fopen("student.txt", "w+"); 	if (fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &infor.num, infor.name); 		fwrite(&infor, sizeof(infor), 1, fp); 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }[/quote]  会有乱码.     jim 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫   lin 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  ??[/quote] 用之前给name数组初始化一下 用0填 ,这样按字符串输出的时候 可以正确找到结束,不初始化 编译器会自己帮你填值 vc是0xcc 0xcccc就是中文的烫[/quote]  这样吗？ int main() {     FILE * fp;     char ch;     struct stu infor;     int n, i;     char name[NAME_LEN] = {0};  这样貌似也不行的，还有烫字[/quote]   #include <stdio.h>   #define NAME_LEN 100   struct stu {     int num;     char name[NAME_LEN]; };   int main() {     FILE * fp;     struct stu infor;     int n, i;       fp = fopen("student.txt", "w+");     if (fp == NULL)     {         printf("error open file\n");         return 1;     }     printf("input all student number \n");     scanf("%d", &n);     for(i = 0; i < n; i++)     {         printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		memset(infor.name,0,NAME_LEN);         scanf("%d %s", &infor.num, infor.name);         fwrite(&infor, sizeof(infor), 1, fp);     }     fclose(fp);     printf("资料已保存！\n");           return 0; }  这样就不会有烫了 但是你的程序应该还有问题

user: user-0
content: 引用 7 楼 lipoor1234 的回复:[quote=引用 5 楼 linbounconstraint 的回复:] [quote=引用 1 楼 user-6 的回复:] [quote=引用 楼主 linbounconstraint 的回复:] 先输入要写入多少人，然后输入学号，名字，保存信息到.txt 里面。 #include <stdio.h> struct stu { 	int num; 	char name[]; }; int main() { 	FILE * fp; 	struct stu infor; 	int n, i; 	fp = fopen("student.txt", "w+"); 	if(fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &(infor).num, (infor).name); 		fwrite(&infor, sizeof(infor), 1, fp); 		 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }  [cxl@chenxiaolei ~]$ gcc -Wall  main.c -o main  [cxl@chenxiaolei ~]$ ./main input all student number  2 input the num and name like:03 jim the NO1: 03 sam 段错误 (core dumped) [cxl@chenxiaolei ~]$  好歹给name一个存储空间，^_^. #include <stdio.h>  #define NAME_LEN 100  struct stu { 	int num; 	char name[NAME_LEN]; };  int main() { 	FILE * fp; 	struct stu infor; 	int n, i;  	fp = fopen("student.txt", "w+"); 	if (fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &infor.num, infor.name); 		fwrite(&infor, sizeof(infor), 1, fp); 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }[/quote]  会有乱码.     jim 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫   lin 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  ??[/quote] 用之前给name数组初始化一下 用0填 ,这样按字符串输出的时候 可以正确找到结束,不初始化 编译器会自己帮你填值 vc是0xcc 0xcccc就是中文的烫[/quote]  这样吗？ int main() {     FILE * fp;     char ch;     struct stu infor;     int n, i;     char name[NAME_LEN] = {0};  这样貌似也不行的，还有烫字

user: user-2
content: 引用 5 楼 linbounconstraint 的回复:[quote=引用 1 楼 user-6 的回复:] [quote=引用 楼主 linbounconstraint 的回复:] 先输入要写入多少人，然后输入学号，名字，保存信息到.txt 里面。 #include <stdio.h> struct stu { 	int num; 	char name[]; }; int main() { 	FILE * fp; 	struct stu infor; 	int n, i; 	fp = fopen("student.txt", "w+"); 	if(fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &(infor).num, (infor).name); 		fwrite(&infor, sizeof(infor), 1, fp); 		 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }  [cxl@chenxiaolei ~]$ gcc -Wall  main.c -o main  [cxl@chenxiaolei ~]$ ./main input all student number  2 input the num and name like:03 jim the NO1: 03 sam 段错误 (core dumped) [cxl@chenxiaolei ~]$  好歹给name一个存储空间，^_^. #include <stdio.h>  #define NAME_LEN 100  struct stu { 	int num; 	char name[NAME_LEN]; };  int main() { 	FILE * fp; 	struct stu infor; 	int n, i;  	fp = fopen("student.txt", "w+"); 	if (fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &infor.num, infor.name); 		fwrite(&infor, sizeof(infor), 1, fp); 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }[/quote]  会有乱码.     jim 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫   lin 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  ??[/quote] 用之前给name数组初始化一下 用0填 ,这样按字符串输出的时候 可以正确找到结束,不初始化 编译器会自己帮你填值 vc是0xcc 0xcccc就是中文的烫

user: user-0
content: 引用 2 楼 max_min_ 的回复:1 name给个大小空间，你没有给大小！ 2 吃掉第一次输入的时候多余的回车符！  是第一次scanf，多少个人的空格吗？比如：2空格  这个空格吗？ 如何吃掉，getchar（）吗？这个不是得到字符的，解释下，版主，谢谢。对了，txt文件是乱码如 ：   jim 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫   lin 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  怎么回事？

user: user-0
content: 引用 1 楼 user-6 的回复:[quote=引用 楼主 linbounconstraint 的回复:] 先输入要写入多少人，然后输入学号，名字，保存信息到.txt 里面。 #include <stdio.h> struct stu { 	int num; 	char name[]; }; int main() { 	FILE * fp; 	struct stu infor; 	int n, i; 	fp = fopen("student.txt", "w+"); 	if(fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &(infor).num, (infor).name); 		fwrite(&infor, sizeof(infor), 1, fp); 		 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }  [cxl@chenxiaolei ~]$ gcc -Wall  main.c -o main  [cxl@chenxiaolei ~]$ ./main input all student number  2 input the num and name like:03 jim the NO1: 03 sam 段错误 (core dumped) [cxl@chenxiaolei ~]$  好歹给name一个存储空间，^_^. #include <stdio.h>  #define NAME_LEN 100  struct stu { 	int num; 	char name[NAME_LEN]; };  int main() { 	FILE * fp; 	struct stu infor; 	int n, i;  	fp = fopen("student.txt", "w+"); 	if (fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &infor.num, infor.name); 		fwrite(&infor, sizeof(infor), 1, fp); 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }[/quote]  会有乱码.     jim 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫   lin 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫  ??

user: user-3
content: 如果name不想用定长数组的话，就每次自己分配空间，清除空间 不过从你的程序看，这样做好像也没什么意义

user: user-4
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-5
content: 1 name给个大小空间，你没有给大小！ 2 吃掉第一次输入的时候多余的回车符！

user: user-6
content: 引用 楼主 linbounconstraint 的回复:先输入要写入多少人，然后输入学号，名字，保存信息到.txt 里面。 #include <stdio.h> struct stu { 	int num; 	char name[]; }; int main() { 	FILE * fp; 	struct stu infor; 	int n, i; 	fp = fopen("student.txt", "w+"); 	if(fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &(infor).num, (infor).name); 		fwrite(&infor, sizeof(infor), 1, fp); 		 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }  [cxl@chenxiaolei ~]$ gcc -Wall  main.c -o main  [cxl@chenxiaolei ~]$ ./main input all student number  2 input the num and name like:03 jim the NO1: 03 sam 段错误 (core dumped) [cxl@chenxiaolei ~]$  好歹给name一个存储空间，^_^. #include <stdio.h>  #define NAME_LEN 100  struct stu { 	int num; 	char name[NAME_LEN]; };  int main() { 	FILE * fp; 	struct stu infor; 	int n, i;  	fp = fopen("student.txt", "w+"); 	if (fp == NULL) 	{ 		printf("error open file\n"); 		return 1; 	} 	printf("input all student number \n"); 	scanf("%d", &n); 	for(i = 0; i < n; i++) 	{ 		printf("input the num and name\nlike:03 jim\nthe NO%d:\n", i+1); 		scanf("%d %s", &infor.num, infor.name); 		fwrite(&infor, sizeof(infor), 1, fp); 	} 	fclose(fp); 	printf("资料已保存！\n"); 	 	return 0; }