结构体定义问题请教
结构体初学,打印时,在黑窗口输入时会出问题无法正常打印,请问哪里出错了??#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name;
char sex;
int age;
float score;
char addr ;
};
int main()
{
struct student sarr;
int i;
for (i = 0; i < 3; i++)
{
scanf("%d%s %c%d%f%s",&sarr.num,sarr.name,&sarr.sex,&sarr.age,&sarr.score,sarr.addr);
}
for (i = 0; i < 3; i++)
{
printf("%d %s %c %d %5.2f %s\n", sarr.num, sarr.name, sarr.sex, sarr.age, sarr.score, sarr.addr);
}
return 0;
}
在你提供的代码中,存在一个问题导致无法正常打印结构体数据。问题出在 scanf 函数调用中,对于 %s 格式化符号,它需要一个字符数组的地址作为参数。然而,在你的代码中,你没有给出 sarr.name 和 sarr.addr 对应的地址,而是直接传递了数组名。
要修复这个问题,你需要使用 & 运算符获取数组的地址。修改 scanf 函数调用中的参数为 &sarr.name 和 &sarr.addr。
以下是修复后的代码示例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name;
char sex;
int age;
float score;
char addr;
};
int main() {
struct student sarr;
int i;
for (i = 0; i < 3; i++) {
scanf("%d%s %c%d%f%s", &sarr.num, sarr.name, &sarr.sex, &sarr.age,
&sarr.score, sarr.addr);
}
for (i = 0; i < 3; i++) {
printf("%d %s %c %d %5.2f %s\n", sarr.num, sarr.name, sarr.sex,
sarr.age, sarr.score, sarr.addr);
}
return 0;
}
通过在 scanf 函数调用中使用 & 运算符来获取数组地址,你应该能够正常打印结构体数据了。希望这可以解决你的问题! 你的代码看起来已经非常好了,其定义和使用结构体都没有问题。不过,如果你在输入时遇到了问题,可能的原因是你在使用scanf函数获取输入时数据的格式出错了。
你的scanf调用如下:
scanf("%d%s %c%d%f%s",&sarr.num,sarr.name,&sarr.sex,&sarr.age,&sarr.score,sarr.addr);
根据这个scanf格式字符串,你应该按照下面的顺序和格式输入数据:
1. 一个整数(例如,101)。
2. 不含空格的一个字符串(例如,张三)。
3. 一个字符(例如,M)。
4. 一个整数(例如,20)。
5. 一个浮点数(例如,98.5)。
6. 不含空格的一个字符串(例如,北京)。
每个数据之间应该用空格分隔。
举个例子,你的输入应该是类似这样的:
101 张三 M 20 98.5 北京
你的scanf语句在读取name和addr字段时,不能处理含有空格的字符串。如果你的输入中的这些字段包含空格,可能就会出现问题。
注意: scanf函数中的%s格式化符号是以空格、制表符或换行符作为字符串结束的标志的,所以无法读取含有空格的字符串。
如果你的输入数据中的name或addr可能会包含空格,你需要使用其他的读取方式,例如fgets函数。然而, fgets会把换行符也读进来,因此需要额外处理这个换行符。 陶远航 发表于 2023-7-16 14:22
在你提供的代码中,存在一个问题导致无法正常打印结构体数据。问题出在 scanf 函数调用中,对于 %s 格式化 ...
定义时给sarr.name 和 sarr.addr定义成了数组,数组名存的不就是起始地址嘛,所以调用scanf时,是不是可以直接写数组名而不用写&呢? isdkz 发表于 2023-7-16 14:25
你的代码看起来已经非常好了,其定义和使用结构体都没有问题。不过,如果你在输入时遇到了问题,可能的原因 ...
超级感谢!{:10_254:}
页:
[1]