不知道哪里错了啊呀唉9

#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
    ;

}

img

结构体定义不要放在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;

}

以上是对代码中的问题进行修正和优化的建议,希望能对您有所帮助!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^