#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,表示程序执行成功
}
你可以试着运行修改后的代码,应该可以正确显示学号、姓名和成绩了。
【相关推荐】
你这定义结构体变量的方式都是错的。