#include<stdlib.h> #define N 10 typedef struct { char no[15]; char name[10]; float score[3]; float aver; }STU; void Input_Info(STU a[], int n) { /********** Begin **********/ for(int i=0;i<n;i++) { double sum=0; scanf("%c",&STU[i].no); scanf("%c",&STU[i].name); for(int j=0;j<3;j++) { scanf("%f",&STU[i].score[j]); sum=sum+STU[i].score[j]; } STU[i].aver=sum/3; } /********** End **********/ } void Write_Info(STU a[], int n){ /********** Begin **********/ for(int i=0;i<n;i++) { printf("%c\t",STU[i].no); printf("%c\t",STU[i].name); for(int j=0;j<3;j++) { printf("%f\t",STU[i].score[j]); } printf("%f\n",STU[i].aver); } /********** End **********/ }这个有什么问题吗
时间: 2023-07-23 18:37:24 浏览: 100
这段代码存在一些问题:
1. 在输入学生信息时,应该使用 `&a[i].no` 代替 `&STU[i].no`,`&a[i].name` 代替 `&STU[i].name`,因为 `STU` 是结构体类型,而 `a[i]` 是结构体数组中的具体元素。
2. 在输入学生信息时,每次读取字符时,应该加上空格忽略掉换行符,因为换行符会被留在输入缓冲区中,影响后续的输入。
3. 在输出学生信息时,应该使用 `a[i].no` 代替 `STU[i].no`,`a[i].name` 代替 `STU[i].name`,因为 `STU` 是结构体类型,而 `a[i]` 是结构体数组中的具体元素。
4. 在输出学生信息时,浮点数应该使用 `%f` 而不是 `%d` 进行格式化输出。
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct {
char no[15];
char name[10];
float score[3];
float aver;
} STU;
void Input_Info(STU a[], int n) {
for (int i = 0; i < n; i++) {
double sum = 0;
scanf("%s", a[i].no);
scanf(" ");
scanf("%s", a[i].name);
scanf(" ");
for (int j = 0; j < 3; j++) {
scanf("%f", &a[i].score[j]);
sum += a[i].score[j];
}
a[i].aver = sum / 3;
}
}
void Write_Info(STU a[], int n) {
for (int i = 0; i < n; i++) {
printf("%s\t", a[i].no);
printf("%s\t", a[i].name);
for (int j = 0; j < 3; j++) {
printf("%f\t", a[i].score[j]);
}
printf("%f\n", a[i].aver);
}
}
int main() {
STU a[N];
Input_Info(a, N);
Write_Info(a, N);
return 0;
}
```
阅读全文