首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

还是老有关问题,花了200分还没解决,再加100!求各位前辈帮忙

2012-09-07 
还是老问题,花了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打印出来肯定是错误的。

探讨
很简单,把scanf改为如下一条语句即可:
scanf("%d %s %c %d", &amp;stu[i].num, stu[i].name, &amp;stu[i].sex, &amp;stu[i].age);
1、stu[i].name前面的取地址符号去掉,它本身就是指针;
2、scanf是带缓冲输入的,所以直接用一条语句,避免产生不必要的换行读取

热点排行