还是老问题,花了200分还没解决,再加100!求各位前辈帮忙~C/C++ code#includestdio.hmain(){ struct{int n
还是老问题,花了200分还没解决,再加100!求各位前辈帮忙~
C/C++ code#include<stdio.h>main(){ struct { int num; char name[20]; char sex; int age; }stu[5]; int i; for(i=0;i<5;i++) { printf("请输入学生信息\n"); scanf("%d",&stu[i].num); scanf("%s",&stu[i].name); scanf("%c",&stu[i].sex); scanf("%d",&stu[i].age); } for(i=0;i<5;i++) { printf( "*%s*",stu[i].name); } }
输入五个学生信息,如果按照输入完一组数据后,按回车进行第二组的输入,只能输入三组就结束。比如这样(我是用VC6.0++运行的,请各位大牛也亲自运行一下!这问题困扰我一个星期了!)
001 zhangsan m 18(按回车准备进行第二组的输入,结果出现这样)
请输入学生信息
请输入学生信息
002 lisi m 20(按回车准备进行第三组的输入。。。。)
请输入学生信息
请输入学生信息
003 wangwu w 23(接下来我按回车想输入第四组数据的时候,for循环直接结束,输出stu[i]的名字,结果如下)
*zhangsan*m*lisi*m*wangwu*
红色部分是我运行时的输入情况。请大牛帮我分析一下错在哪里,为什么会这样,最好大牛们能亲自运行一下。能帮我改一下源代码,能够正确执行,谢谢了!
[解决办法]#include "stdafx.h"
typedef struct{
float chi;
float math;
float eng;
float phy;
float chem;
}score_1;
typedef struct{
int num;
char name[20];
char sex;
int age;
score_1 score;
}student;
student stu[10];
int main(int argc, char* argv[])
{
int i;
for(i=0;i<10;i++)
{
printf("请输入学生信息:\n");
scanf("%d,%s,%c,%d,%f,%f,%f,%f,%f",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score.chi,&stu[i].score.math,&stu[i].score.eng,&stu[i].score.phy,&stu[i].score.chem);
}
printf("Hello World!\n");
return 0;
}
数据输入如下:
0021,liqiang,m,20,85,78,89,56,78(回车)......
哥哥,上次就是我回答的你。你没有仔细看我的代码,上次是i<3(为了测试方便,有注释)。这次一定行!!!
[解决办法]C/C++ code scanf(" %c",&stu[i].sex);
[解决办法]
printf("请输入第%d学生信息\n",i+1);
scanf("%d %s %c %d",&stu[i].num,&stu[i].name,&stu[i].sex ,&stu[i].age );把scanf这个改成这样,因为你分成几步的话,编译器会编译成和你理解的不一样,还有楼主就是把数组改大一点,防止溢出错误
[解决办法]
很简单,把scanf改为如下一条语句即可:
scanf("%d %s %c %d", &stu[i].num, stu[i].name, &stu[i].sex, &stu[i].age);
1、stu[i].name前面的取地址符号去掉,它本身就是指针;
2、scanf是带缓冲输入的,所以直接用一条语句,避免产生不必要的换行读取
[解决办法]
发现在输入name时,如果名字长度不够20个字符,那么接下来的sex,age都会输进name[20]的数组中。后来的printf打印出来肯定是错误的。