user-0 提问: 【C的一道题】关于成绩管理系统的输入名字一点小问题，求解答。。

回复:
user: user-0
content: 引用 3 楼 buyong 的回复:sizeof(struct student) 比较可疑 那应该肿么办呢 我把sizeof换成20了 在运行的时候有时候会突然好使，有时候就不好使，这是为什么啊。。。

user: user-0
content: 引用 4 楼 uuuououlcz 的回复:可能有问题的地方，纯属个人意见，仅供参考：  struct student { 	int number;                   //学号 	float score[3];               //分数 	char name[100];               //名字，这么长的名字，有点多了吧？ }; void input(struct student *parr,int len)        //函数功能：手动输入学生信息或者选择读取文件 { 	char ch; 	printf("请选择你要录入学生信息的方式：1、手动输入  2、读取磁盘文件\n"); 	getchar();      //这个getchar()是干嘛的，等待键盘输入的方式选项？如果是为什么没有赋给ch 	scanf("%c",&ch);//这个是吃掉输入流中的'\n'换行符？还是，这才是等待键盘输入？                         //不管这个scanf是做什么用的，他都需要等待键盘输入 + Enter                         //而这个Enter会作为换行符留在输入流中，如果刚好选择的是手动输入'1'                         //则这个换行符直接遇到了scanf("%s",parr[i].name);，这又使                         //scanf字符串返回，parr[0].name为空 	switch(ch) 	{ 	case '1': 		int i; 		FILE *fp; 		fp=fopen("D:\\student.dat","w");//fopen("", "w")本身就会在没有则个文件的时候                                                 //创建一个新文件，并返回对应的文件结构指针                                                 //下面再一次fopen("", "w")是干嘛？ 		if((fopen("D:\\student.dat","w"))==NULL) 		{ 			printf("创建文件失败,请重新创建!"); 			exit(0); 		} 		printf("已创建成功！\n"); 		for(i=0;i<len;i++){ 			printf("请输入第%d个学生信息：\n",i+1); 			printf("姓名："); 			scanf("%s",parr[i].name);   //这里建议写作scanf(" %s",parr[i].name); 			printf("学号："); 			scanf("%d",&parr[i].number); 			printf("高等数学成绩："); 			scanf("%f",&parr[i].score[0]); 			printf("课程设计成绩："); 			scanf("%f",&parr[i].score[1]); 			printf("大学英语成绩："); 			scanf("%f",&parr[i].score[2]); 			fwrite(&parr[i],sizeof(struct student),1,fp); 		} 		printf("文件已保存！"); 		fclose(fp); 	case'2':  谢谢~  可是问题还是没有解决，输入名字依旧不能输入一个以上的字母。。

user: user-1
content: 可能有问题的地方，纯属个人意见，仅供参考：  struct student { 	int number;                   //学号 	float score[3];               //分数 	char name[100];               //名字，这么长的名字，有点多了吧？ }; void input(struct student *parr,int len)        //函数功能：手动输入学生信息或者选择读取文件 { 	char ch; 	printf("请选择你要录入学生信息的方式：1、手动输入  2、读取磁盘文件\n"); 	getchar();      //这个getchar()是干嘛的，等待键盘输入的方式选项？如果是为什么没有赋给ch 	scanf("%c",&ch);//这个是吃掉输入流中的'\n'换行符？还是，这才是等待键盘输入？                         //不管这个scanf是做什么用的，他都需要等待键盘输入 + Enter                         //而这个Enter会作为换行符留在输入流中，如果刚好选择的是手动输入'1'                         //则这个换行符直接遇到了scanf("%s",parr[i].name);，这又使                         //scanf字符串返回，parr[0].name为空 	switch(ch) 	{ 	case '1': 		int i; 		FILE *fp; 		fp=fopen("D:\\student.dat","w");//fopen("", "w")本身就会在没有则个文件的时候                                                 //创建一个新文件，并返回对应的文件结构指针                                                 //下面再一次fopen("", "w")是干嘛？ 		if((fopen("D:\\student.dat","w"))==NULL) 		{ 			printf("创建文件失败,请重新创建!"); 			exit(0); 		} 		printf("已创建成功！\n"); 		for(i=0;i<len;i++){ 			printf("请输入第%d个学生信息：\n",i+1); 			printf("姓名："); 			scanf("%s",parr[i].name);   //这里建议写作scanf(" %s",parr[i].name); 			printf("学号："); 			scanf("%d",&parr[i].number); 			printf("高等数学成绩："); 			scanf("%f",&parr[i].score[0]); 			printf("课程设计成绩："); 			scanf("%f",&parr[i].score[1]); 			printf("大学英语成绩："); 			scanf("%f",&parr[i].score[2]); 			fwrite(&parr[i],sizeof(struct student),1,fp); 		} 		printf("文件已保存！"); 		fclose(fp); 	case'2':

user: user-2
content: sizeof(struct student) 比较可疑

user: user-3
content: 引用 1 楼 user-3 的回复:不能用scanf直接给数组赋值吧 不好意思，我搞错了，我这边试一下好像是可以的

user: user-3
content: 不能用scanf直接给数组赋值吧