| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 890 人关注过本帖
标题:[求助]循环跳出的问题??
只看楼主 加入收藏
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
 问题点数:0 回复次数:11 
[求助]循环跳出的问题??

以下的程序,如果去掉蓝色的部分,则正常,但如果将红色的部分去掉的话(蓝色保留),这个循环就出错误.首先是排序出问题.而且平均分数也不正确.不知道什么原因,大家帮我看看啦,谢谢!!
(我想保留for(n=0;n<S;n++)这句,因为题目要求输入不少于50人,但我又希望能每次输入完成后提示是否继续输入.否则,只能输入50遍以后才能排序.)
#include<stdio.h>
#define S 3
#define C 2

void input();
void re_input();
void list();
//####定义学生信息结构体####//
struct student
{
int id;
char name[15];
char sex[5];
float achieve[C];
float average;
}stus[S];
//######主函数体开始#######//
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");

do
{
re_input();
printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
printf("排序前的顺序为:\n");
fflush(stdin);
display();
printf("排序后的顺序为:\n");
list();

}
//####学生成绩录入函数####//
void re_input()
{
int n;
int i;

do
{
for(n=0;n<S;n++)
{
printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的 %d 门课的成绩:\t",C);
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%f",&stus[n].achieve[i]);
stus[n].average+=stus[n].achieve[i];
}
stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
}

printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
}
//####学生信息简单显示函数####//
display()
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
//####学生列表排序函数####//
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}

搜索更多相关主题的帖子: include 结构体 而且 信息 
2006-09-18 14:57
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
以下是引用cnrainboy在2006-9-18 14:57:40的发言:

以下的程序,如果去掉蓝色的部分,则正常,但如果将红色的部分去掉的话(蓝色保留),这个循环就出错误.首先是排序出问题.而且平均分数也不正确.不知道什么原因,大家帮我看看啦,谢谢!!
(我想保留for(n=0;n<S;n++)这句,因为题目要求输入不少于50人,但我又希望能每次输入完成后提示是否继续输入.否则,只能输入50遍以后才能排序.)
#include<stdio.h>
#define S 3
#define C 2

void input();
void re_input();
void list();
//####定义学生信息结构体####//
struct student
{
int id;
char name[15];
char sex[5];
float achieve[C];
float average;
}stus[S];
//######主函数体开始#######//
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");

do
{
re_input();
printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
printf("排序前的顺序为:\n");
fflush(stdin);//这个是什么意思?
display();
printf("排序后的顺序为:\n");
list();

}
//####学生成绩录入函数####//
void re_input()
{
int n;
int i;

do
{
for(n=0;n<S;n++)
{
printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的 %d 门课的成绩:\t",C);
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%f",&stus[n].achieve[i]);
stus[n].average+=stus[n].achieve[i];
}
stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
}

printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
}
//####学生信息简单显示函数####//
display()
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
//####学生列表排序函数####//
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}


------------------不为别的,就为你,我的理想!-----------------
2006-09-18 15:41
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
得分:0 
以下是引用jxnuwy04在2006-9-18 15:41:30的发言:

加了一个清空存缓,不过这里好象没什么用处

2006-09-18 16:16
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 

#include<stdio.h>
#define S 3
#define C 2

void input();
void re_input();
void list();
/*####定义学生信息结构体####*/
struct student
{
int id;
char name[15];
char sex[5];
int achieve[C];
float average;
}stus[S];
/*######主函数体开始#######*/
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");

do
{
re_input();
/* printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
  fflush(stdin);*/ 我觉得这里可以不用了
ch=getchar();
}while(ch=='y'||ch=='Y');
printf("排序前的顺序为:\n");
fflush(stdin);
display();
printf("排序后的顺序为:\n");
list();
display();
getch();

}
/*####学生成绩录入函数####*/
void re_input()
{
int n;
int i;
char ch; /*定义字符*/
do
{
for(n=0;n<S;n++)
{
printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的2 门课的成绩:\t");
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%d",&stus[n].achieve[i]); //这里不知道是我的编译器有问题,还是哪出了问题,只有这样的格式才能输入数据;
stus[n].average+=stus[n].achieve[i];
}

stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
}

printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
}
/*####学生信息简单显示函数####*/
display()
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
/*####学生列表排序函数####*/
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
 删掉了这里的输出语句,因为你已经有了显示的函数了,再来个输出语句会觉得多余.

}
我运行了一下,可以的,你可以运行一下.其实有些程序放在TC中调试的话,用F7键一步一步来就能看出哪错了的.
还有就是排序的程序书上有,我没怎么看,如果不对的话书上可以找到原代码.


------------------不为别的,就为你,我的理想!-----------------
2006-09-18 16:36
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
得分:0 
以下是引用jxnuwy04在2006-9-18 16:36:53的发言:

#include<stdio.h>
#define S 3
#define C 2

void input();
void re_input();
void list();
/*####定义学生信息结构体####*/
struct student
{
int id;
char name[15];
char sex[5];
int achieve[C];
float average;
}stus[S];
/*######主函数体开始#######*/
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");

do
{
re_input();
/* printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
  fflush(stdin);*/ 我觉得这里可以不用了
ch=getchar();
}while(ch=='y'||ch=='Y');
printf("排序前的顺序为:\n");
fflush(stdin);
display();
printf("排序后的顺序为:\n");
list();
display();
getch();

}
/*####学生成绩录入函数####*/
void re_input()
{
int n;
int i;
char ch; /*定义字符*/
do
{
for(n=0;n<S;n++)
{
printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的2 门课的成绩:\t");
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%d",&stus[n].achieve[i]); //这里不知道是我的编译器有问题,还是哪出了问题,只有这样的格式才能输入数据;
stus[n].average+=stus[n].achieve[i];
}

stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
}

printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
}
/*####学生信息简单显示函数####*/
display()
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<S;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
/*####学生列表排序函数####*/
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
 删掉了这里的输出语句,因为你已经有了显示的函数了,再来个输出语句会觉得多余.

}
我运行了一下,可以的,你可以运行一下.其实有些程序放在TC中调试的话,用F7键一步一步来就能看出哪错了的.
还有就是排序的程序书上有,我没怎么看,如果不对的话书上可以找到原代码.

成绩我认为是浮点型的,可以是小数,所以我用了FLOAT类型.list函数最后的输出应该是必须的.否则MAIN函数调用会不显示结果的/
还有我用的是VC6++,环境.如果有哪里不对的,请指正/谢谢
我想实现的是,输入一个信息,然后确认一次,否则,这样只能输入三个人后才能确认,如果换成50人的话,要累死的/
还有,上面红色的话,我收回.对不起,去掉后可以显示.

[此贴子已经被作者于2006-9-18 17:05:07编辑过]

2006-09-18 16:59
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
得分:0 

我在这里加入跳出(break)(return)两个我都试过,无法进行排序了,好象是后面的覆盖了前面的信息.不知道怎么改
void list()
{
int i,j;
struct student temp;
for(i=0;i<S;i++)
{
for(j=0;j<S-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}
(break)(return)我在这里加入跳出两个我都试过,无法进行排序了,好象是后面的覆盖了前面的信息.不知道怎么改

}


[此贴子已经被作者于2006-9-18 17:10:11编辑过]

2006-09-18 17:08
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 

#include<stdio.h>
#define S 50
#define C 2

void input();
int re_input();
void list(int);
/*####定义学生信息结构体####*/
struct student
{
int id;
char name[15];
char sex[5];
int achieve[C];
float average;
}stus[S];
/*######主函数体开始#######*/
int m=0;
main()
{
char ch;
printf("\n┠─────学生成绩系统─────┨\n");

m=re_input();
/* printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
  fflush(stdin); 我觉得这里可以不用了*/


printf("排序前的顺序为:\n");
fflush(stdin);
display(m);
printf("排序后的顺序为:\n");
list(m);
display(m);
getch();

}
/*####学生成绩录入函数####*/
int re_input()
{
int n;
int i;
char ch; /*定义字符*/
n=0;
do
{

printf("\n\t请输入学员的详细信息");
printf("\n\n请输入学号:\t");
scanf("%d",&stus[n].id);
printf("\n请输入学生姓名:\t");
fflush(stdin);
gets(stus[n].name);
printf("\n请输入学生性别:\t");
fflush(stdin);
gets(stus[n].sex);
printf("\n请输入学生的2 门课的成绩:\t");
fflush(stdin);
for(i=0,stus[n].average=0;i<C;i++)
{
scanf("%d",&stus[n].achieve[i]); /*/这里不知道是我的编译器有问题,还是哪出了问题,只有这样的格式才能输入数据;
*/stus[n].average+=stus[n].achieve[i];
}

stus[n].average/=C;
printf("这个平均分为%.2f",stus[n].average);
n++;


printf("\n\n是否继续录入信息?(是 Y/否 N)\n");
fflush(stdin);
ch=getchar();
}while(ch=='y'||ch=='Y');
return n;
}
/*####学生信息简单显示函数####*/
display(int n)
{
int j;
printf("\n学号\t姓名\t性别\t平均成绩\n");
for(j=0;j<n;j++)
printf("%d\t%s\t%s\t%.2f\n",stus[j].id,stus[j].name,stus[j].sex,stus[j].average);
}
/*####学生列表排序函数####*/
void list(int n)
{
int i,j;
struct student temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stus[j].average<stus[j+1].average)
{
temp=stus[j+1];
stus[j+1]=stus[j];
stus[j]=temp;
}
}
}

}
看下这个能实现你想要的不?我觉得排序没错吧!应该看的到哪里修改了吧


------------------不为别的,就为你,我的理想!-----------------
2006-09-18 18:18
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
得分:0 

加了全局变量M??

2006-09-18 18:57
cnrainboy
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-8-27
收藏
得分:0 
能讲讲为什么吗?有点迷惑了
2006-09-18 19:11
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
也可以不用全局变量,将学生人数作为一个参数传给函数.不过要记得在输入函数里修改m的值返回出来.

倚天照海花无数,流水高山心自知。
2006-09-18 22:10
快速回复:[求助]循环跳出的问题??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062698 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved