当前位置: 代码迷 >> C语言 >> 为什么输入一排“烫”●奇怪???
  详细解决方案

为什么输入一排“烫”●奇怪???

热度:277   发布时间:2006-04-08 10:40:00.0
为什么输入一排“烫”●奇怪???
今天编程做个学生成绩统计的小程序

可是运行时老是输入一堆“烫”
难道我很烫吗??答案当然是否定的```
那是为什么呢``???
请高手门指点下```
搜索更多相关的解决方案: 输入  

----------------解决方案--------------------------------------------------------

我的代码是这样的:
#include<stdio.h>
#include<stdlib.h>

char flag='y';

struct info
{
char name[20];
int grade1;
int grade2;
int grade3;
float avg;
};

int input(struct info stu[])
{
int count=1;

while(flag=='y'||flag=='Y')
{
printf("\n请输入第%d个学生的信息:\n",count);
printf("全输入学生的名字:");
fflush(stdin);
gets(stu[count].name);
printf("第一门成绩是:\n");
scanf("%d",&stu[count].grade1);
printf("第二门成绩是:\n");
scanf("%d",&stu[count].grade2);
printf("第三门成绩是:\n");
scanf("%d",&stu[count].grade3);
count++;
printf("要继续吗?(y/n)");
scanf("%1s",&flag);
}
return count;
}

void arrange(struct info stu[],int count)
{
struct info temp;
for(int a=0;a<count-1;a++)
{
for(int b=1;b<count;b++)
{
if(stu[a].avg<=stu[b].avg)
{
temp=stu[a];
stu[b]=temp;
stu[a]=temp;
}
}
}
}

void display(struct info stu[],int count)
{
printf("学生成绩如下:\n");
for(int a=0;a<count;a++)
{
stu[a].avg=(float)((stu[a].grade1+stu[a].grade2+stu[a].grade3)/3.0);
printf("姓名\t\t平均成绩\n");
printf("%s\t\t%3f",stu[a].name,stu[a].avg);
}
}

void main()
{
int num=0;
struct info stu[50];
char flag1='y';
while(flag1=='y'||flag1=='Y')
{
num=input(stu);
if(flag=='n'||flag=='N')
{
display(stu,num);
arrange(stu,num);
display(stu,num);
}
printf("要继续吗?(y/n)");
scanf("%1s",&flag1);
if(flag1=='n'||flag1=='N')
break;
num++;
}

}
帮忙看看```


----------------解决方案--------------------------------------------------------
真诚帖 啊``
没人帮我啊``
好失望```
----------------解决方案--------------------------------------------------------

错误很多..

#include<stdio.h>
#include<stdlib.h>

char flag='y';

struct info
{
char name[20];
int grade1;
int grade2;
int grade3;
float avg;
};

int input(struct info stu[])
{
int count=1;

while(flag=='y'||flag=='Y')
{
printf("\n请输入第%d个学生的信息:\n",count);
printf("全输入学生的名字:");

gets(stu[count-1].name);
printf("第一门成绩是:\n");
scanf("%d",&stu[count-1].grade1);
getchar();
printf("第二门成绩是:\n");
getchar();
scanf("%d",&stu[count-1].grade2);
getchar();
printf("第三门成绩是:\n");
scanf("%d",&stu[count-1].grade3);
getchar();

printf("要继续吗?(y/n)");
scanf("%1s",&flag);
getchar();
if (flag=='y'||flag=='Y')
count++;

}
return count;
}

void arrange(struct info stu[],int count)
{
struct info temp;
for(int a=0;a<count-2;a++)
for(int b=a+1;b<count-1;b++)
if(stu[a].avg<stu[b].avg)
{
temp=stu[a];
stu[a]=stu[b];
stu[b]=temp;
}


}

void display(struct info stu[],int count)
{ int a;

for( a=0;a<count;a++)
{
stu[a].avg=(float)((stu[a].grade1+stu[a].grade2+stu[a].grade3)/3.0);
printf("姓名\t\t平均成绩\n");
printf("%s\t\t%.3f\n",stu[a].name,stu[a].avg);

}
}

main()
{
int num=0;
float *a,b;
a=&b;
struct info stu[50];
char flag1='y';

while(flag1=='y'||flag1=='Y')
{
num=input(stu);
if(flag=='n'||flag=='N')
{
display(stu,num);
arrange(stu,num);
display(stu,num);
}
printf("\n要继续吗?(y/n)");
scanf("%c",&flag1);
getchar();
if(flag1=='n'||flag1=='N')
break;
}

}

有些小的细节 我也没改 总之我这样在C-FREE下可以正常运行.输入..输出..我着急要走

等回来再给你看

[此贴子已经被作者于2006-4-8 12:34:36编辑过]


----------------解决方案--------------------------------------------------------
以下是引用え元元え在2006-4-8 10:40:00的发言:

我的代码是这样的:
#include<stdio.h>
#include<stdlib.h>

char flag='y';

struct info
{
char name[20];
int grade1;
int grade2;
int grade3;
float avg;
};

int input(struct info stu[])
{
int count=1;

while(flag=='y'||flag=='Y')
{
printf("\n请输入第%d个学生的信息:\n",count);
printf("全输入学生的名字:");
fflush(stdin);
gets(stu[count].name);
printf("第一门成绩是:\n");
scanf("%d",&stu[count].grade1);/* 严重马虎 count-1 数组下标起始地址为0 */
printf("第二门成绩是:\n");
scanf("%d",&stu[count].grade2);
printf("第三门成绩是:\n");
scanf("%d",&stu[count].grade3);
count++; /* 这的应该加个 判断语句.要不就不正常多加1了嘛 */
printf("要继续吗?(y/n)");
scanf("%1s",&flag);/* 才看见.这里写 %c就可以啦..为什么要写1S */
}
return count;
}

void arrange(struct info stu[],int count)
{
struct info temp;
for(int a=0;a<count-1;a++)
{
for(int b=1;b<count;b++)/* 循环的不对 */
{
if(stu[a].avg<=stu[b].avg)
{
temp=stu[a];/* 排序错误 */
stu[b]=temp;
stu[a]=temp;
}
}
}
}

void display(struct info stu[],int count)
{
printf("学生成绩如下:\n");
for(int a=0;a<count;a++)
{
stu[a].avg=(float)((stu[a].grade1+stu[a].grade2+stu[a].grade3)/3.0);
printf("姓名\t\t平均成绩\n");
printf("%s\t\t%3f",stu[a].name,stu[a].avg);
}
}

void main()
{
int num=0;
struct info stu[50];
char flag1='y';
while(flag1=='y'||flag1=='Y')
{
num=input(stu);
if(flag=='n'||flag=='N')
{
display(stu,num);/* 最迷糊就这..居然先打印出来然后再 排序.再打印.那样多乱.中间连点东西都不加 自己改吧 */
arrange(stu,num);
display(stu,num);
}
printf("要继续吗?(y/n)");
scanf("%1s",&flag1);/* 这的问题和上面一样 */
if(flag1=='n'||flag1=='N')
break;
num++;/* 不知道有什么用?? 麻烦你解释一下 */
}

}
帮忙看看```

小毛病很多..自己再改下吧..以后自己多细心检查下..


----------------解决方案--------------------------------------------------------
在for的括号里面好象不允许定义
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>

char flag='y';

struct info
{
char name[20];
int grade1;
int grade2;
int grade3;
float avg;
};

int input(struct info stu[])
{
int count=1;
while(flag=='y'||flag=='Y')
{
printf("\n请输入第%d个学生的信息:\n",count);
printf("全输入学生的名字:");
fflush(stdin);
gets(stu[count-1].name);
printf("第一门成绩是:\n");
scanf("%d",&stu[count-1].grade1);
printf("第二门成绩是:\n");
scanf("%d",&stu[count-1].grade2);
printf("第三门成绩是:\n");
scanf("%d",&stu[count-1].grade3);
printf("要继续吗?(y/n)");
scanf("%1s",&flag);
if(flag=='y'||flag=='Y')
{
count++;
}
else
break;
}
return count;
}

void arrange(struct info stu[],int count)
{
struct info temp;
for(int a=0;a<count-1;a++)
{
for(int b=1;b<count;b++)
{
if(stu[a].avg<=stu[b].avg)
{
stu[a]=stu[b];
stu[b]=temp;
temp=stu[a];
}
}
}
}

void display(struct info stu[],int count)
{
printf("学生成绩如下:\n");
for(int a=0;a<count;a++)
{
stu[a].avg=(float)((stu[a].grade1+stu[a].grade2+stu[a].grade3)/3.0);
printf("姓名\t\t平均成绩\n");
printf("%s\t\t%3f",stu[a].name,stu[a].avg);
}
}

void main()
{
int num=0;
struct info stu[50];
char flag1='y';
while(flag1=='y'||flag1=='Y')
{
num=input(stu);
if(flag=='n'||flag=='N')
{
printf("***********************************************\n");
display(stu,num);
arrange(stu,num);
printf("\n***********************************************\n");
display(stu,num);
printf("\n***********************************************\n");
}
printf("要继续吗?(y/n)");
scanf("%1s",&flag1);
if(flag1=='n'||flag1=='N')
break;
}

}

完美````
哈啊 ``
谢谢``


----------------解决方案--------------------------------------------------------
赞元元和sunshining
----------------解决方案--------------------------------------------------------
stu[a]=stu[b];
stu[b]=temp;
temp=stu[a];

~~别的我没看..你这里能对吗???

你把 temp=stu[a] 放到另外俩个的上面!~~迷糊~~


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>

char flag='y';

struct info
{
char name[20];
int grade1;
int grade2;
int grade3;
float avg;
};

int input(struct info stu[])
{
int count=1;
while(flag=='y'||flag=='Y')
{
printf("\n请输入第%d个学生的信息:\n",count);
printf("全输入学生的名字:");
fflush(stdin);
gets(stu[count-1].name);
printf("第一门成绩是:\n");
scanf("%d",&stu[count-1].grade1);
printf("第二门成绩是:\n");
scanf("%d",&stu[count-1].grade2);
printf("第三门成绩是:\n");
scanf("%d",&stu[count-1].grade3);
printf("要继续吗?(y/n)");
scanf("%1s",&flag);
if(flag=='y'||flag=='Y')
{
count++;
}
else
break;
}
return count;
}

void arrange(struct info stu[],int count)
{
struct info temp;
for(int a=0;a<count-1;a++)
{
for(int b=1;b<count;b++)
{
if(stu[a].avg<=stu[b].avg)
{
stu[b]=temp;
stu[a]=stu[b];
temp=stu[a];
}
}
}
}

void display(struct info stu[],int count)
{
printf("学生成绩如下:\n");
for(int a=0;a<count;a++)
{
stu[a].avg=(float)((stu[a].grade1+stu[a].grade2+stu[a].grade3)/3.0);
printf("姓名\t\t平均成绩\n");
printf("%s\t\t%3f",stu[a].name,stu[a].avg);
}
}

void main()
{
int num=0;
struct info stu[50];
char flag1='y';
while(flag1=='y'||flag1=='Y')
{
num=input(stu);
if(flag=='n'||flag=='N')
{
printf("***********************************************\n");
display(stu,num);
arrange(stu,num);
printf("\n***********************************************\n");
display(stu,num);
printf("\n***********************************************\n");
}
printf("要继续吗?(y/n)");
scanf("%1s",&flag1);
if(flag1=='n'||flag1=='N')
break;
}

}
这样???


----------------解决方案--------------------------------------------------------
  相关解决方案