为什么学号和成绩显示不出来


#include<stdio.h>
#include<string.h>
struct student{char name[100];
int number[100];
int grade[100];
};
int main()
{student xingxi[4];
int i;
for(i=0;i<4;i++)
{scanf("%d%s%d",xingxi[i].number,xingxi[i].name,xingxi[i].grade);
}
for(i=0;i<4;i++)
{printf("%d,%s,%d",xingxi[i].number,xingxi[i].name,xingxi[i].grade);
}
}

第12行:scanf("%d%s%d",xingxi[i].number,xingxi[i].name,xingxi[i].grade); 应修改为:scanf("%d%s%d",&xingxi[i].number,xingxi[i].name,&xingxi[i].grade);
修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
struct student {
    char name[100];
    int number; //number[100]; 修改
    int grade;  //grade[100];  修改
};
int main()
{
    struct student xingxi[4]; //student xingxi[4];  修改
    int i;
    for (i = 0; i < 4; i++)
    {
        scanf("%d%s%d", &xingxi[i].number, xingxi[i].name, &xingxi[i].grade);
        //scanf("%d%s%d", xingxi[i].number, xingxi[i].name, xingxi[i].grade); // 修改
    }
    for (i = 0; i < 4; i++)
    {
        printf("%d,%s,%d", xingxi[i].number, xingxi[i].name, xingxi[i].grade);
    }
}

【以下回答由 GPT 生成】

问题分析: 问题出现在scanf()函数和printf()函数的使用上。scanf()函数在读取字符串时,可以直接使用%s,但是读取整型数据时,需要使用地址&。而在printf()函数中,格式控制符%d表示按照整型数据的格式进行输出,而%s表示按照字符串的格式进行输出。

解决方案: 1. 在结构体中,学号和成绩应该定义为int类型,而不是int数组类型。 2. 在scanf()函数中,学号和成绩的输入应该使用地址&,以便将输入的数据存储到相应的变量中。 3. 在printf()函数中,输出学号和成绩时,使用%d作为格式控制符,并且在每个输出项后面添加逗号和空格以便区分。

修改后的代码如下:

#include <stdio.h>
#include <string.h>

struct student{
  char name[100];
  int number;
  int grade;
};

int main(){
  struct student xingxi[4]; // 在结构体前面加上关键字struct
  int i;

  for(i=0; i<4; i++){
    scanf("%d %s %d", &xingxi[i].number, xingxi[i].name, &xingxi[i].grade); // 修改scanf()函数中学号和成绩的输入格式
  }

  for(i=0; i<4; i++){
    printf("%d, %s, %d\n", xingxi[i].number, xingxi[i].name, xingxi[i].grade); // 修改printf()函数中输出格式,并添加换行符\n
  }

  return 0; // 添加返回0,表示程序执行成功
}

你可以试着运行修改后的代码,应该可以正确显示学号、姓名和成绩了。



【相关推荐】



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

你这定义结构体变量的方式都是错的。