#include<stdio.h> typedef struct student { int id; char name[20]; int score[3]; int total; }STU; int main() { STU s[4]; int i,n; //定义结构体变量,用别名方式 for(int i=0;i<n;i++) { gets(s[i].name); scanf("%d%d%d%d",&s[i].id,&s[i].score[0],&s[i].score[1],&s[i].score[2]); puts(s[i].name); printf("%d\n",s[i].id); for(i=0;i<3;i++) s[i].total=s[0].score[0]+s[1].score[1]+s[2].score[2]; printf("%d ",s[i].total); printf("\n");} return 0; }找一下这个代码的错误
时间: 2023-11-27 17:02:49 浏览: 71
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码有几个错误:
1. 变量 `n` 没有被初始化,会导致在 `for` 循环中出现未定义的行为。
2. 函数 `gets()` 已经被废弃了,应该使用 `fgets()` 来代替。
3. 在 `for` 循环中,`i` 的作用域已经被定义了,不能再次定义 `i`。
4. 在计算总分时,应该使用 `i` 作为循环变量,而不是使用 `s` 结构体数组的下标。
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
typedef struct student {
int id;
char name[20];
int score[3];
int total;
} STU;
int main() {
STU s[4];
int n = 4;
for (int i = 0; i < n; i++) {
fgets(s[i].name, 20, stdin);
scanf("%d%d%d", &s[i].id, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
getchar(); // 读取多余的换行符
printf("%s", s[i].name);
printf("%d\n", s[i].id);
s[i].total = 0;
for (int j = 0; j < 3; j++) {
s[i].total += s[i].score[j];
}
printf("%d\n", s[i].total);
}
return 0;
}
```
注意,`scanf()` 函数中只有三个参数,因为只有三个成绩需要被读取。在读取完成绩后,应该使用 `getchar()` 函数读取多余的换行符,以免影响后面的输入。
阅读全文