#include <stdio.h>
int main()
{
struct
{
char name[10];
int num;
char sex[2];
int address;
int c_program;
int english;
int math;
}s[10];
int i;
for (i = 0; i < 7; i++)
{
printf("请依次输入学生的姓名,学号,性别,籍贯,c++成绩,英语成绩,高数成绩等信息");
scanf("%s%d%s%s%d%d%d", s[i].name, &s[i].num, &s[i].sex, &s[i].address, &s[i].c_program, &s[i].english,
s[i].math);
;
}
for (i = 0; i < 7; i++)
{
scanf("%s%d%s%s%d%d%d", s[i].name, &s[i].num, &s[i].sex, &s[i].address, &s[i].c_program, &s[i].english,
&s[i].math);
}
return 0
;
}
结构体定义不要放在main里面
int address;地址是int???
这个报错为 stdio scanf 处的问题,你设置了 %s 需要输入字符串 但是 address 定义为int
【以下回答由 GPT 生成】
问题分析: 该问题的代码存在以下问题: 1. 结构体中sex和address的类型应为字符数组而非字符指针。 2. 第二个for循环中的scanf被多余地重复使用。
代码优化建议: 1. 在结构体中将sex和address的类型改为字符数组,大小根据实际情况设定,保证有足够的容量存储字符串。 2. 修改第一个for循环中的printf语句,提示用户输入的信息编号与结构体成员的对应关系。 3. 删除第二个for循环中的重复的scanf语句。
修改后的代码如下所示:
#include <stdio.h>
int main()
{
struct
{
char name[10];
int num;
char sex[3]; // 修改为字符数组
char address[20]; // 修改为字符数组
int c_program;
int english;
int math;
}s[10];
int i;
for (i = 0; i < 7; i++)
{
printf("请依次输入第%d个学生的姓名、学号、性别、籍贯、C语言成绩、英语成绩、高数成绩等信息: ", i+1);
scanf("%s %d %s %s %d %d %d", s[i].name, &s[i].num, s[i].sex, s[i].address, &s[i].c_program, &s[i].english,
&s[i].math);
}
return 0;
}
以上是对代码中的问题进行修正和优化的建议,希望能对您有所帮助!
【相关推荐】