C语言程序检查为什么输入数据后回车不能运行#include<stdio.h>struct STUDENT{ int number; char name[20]; float score;};int main(){ struct STUDENT student [5]; int t; printf("请输入5个学生学号: 姓名: 成绩: \n"); for(int i=0;i<=5;i++) { scanf("%d%s%f",&student[i].number,student[i].name,&student[i].score);} for(int i=0;i<=5;i++) for(int j=0;j<5-1-i;j++) { if(student[j].score<student[j+1].score) { t=student[j+1].score; student[j+1].score=student[j].score; student[j].score=t; } } for(int i=0;i<=5;i++) { printf("学生学号:%d,学生姓名:%s,学生成绩:%f\n",student[i].number,student[i].name,student[i].score);} return 0;}
时间: 2024-03-10 21:50:46 浏览: 60
这个程序有两个问题:
1. 循环的终止条件应该是小于5,而不是小于等于5,因为数组的下标是从0到4,共5个元素。
2. 在排序时,交换的应该是结构体变量中的 `score` 字段,而不是整个结构体变量。因为交换整个结构体变量会导致其他字段也被交换,从而导致排序结果错误。
修改后的程序如下:
```c
#include <stdio.h>
#include <string.h>
struct STUDENT {
int number;
char name[20];
float score;
};
int main() {
struct STUDENT student[5];
int t;
printf("请输入5个学生学号、姓名、成绩(中间用空格隔开):\n");
for(int i = 0; i < 5; i++) {
scanf("%d %s %f", &student[i].number, student[i].name, &student[i].score);
}
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5 - 1 - i; j++) {
if(student[j].score < student[j+1].score) {
t = student[j+1].score;
student[j+1].score = student[j].score;
student[j].score = t;
}
}
}
printf("学生成绩排序后结果为:\n");
for(int i = 0; i < 5; i++) {
printf("学生学号:%d,学生姓名:%s,学生成绩:%f\n", student[i].number, student[i].name, student[i].score);
}
return 0;
}
```
修改后的程序对输入5个学生的学号、姓名、成绩,并根据成绩进行排序,最后输出每个学生的学号、姓名、成绩。
阅读全文