【发布时间】:2014-05-20 18:28:47
【问题描述】:
我在制作结构数组时遇到了麻烦。我想存储有关多个学生的数据并使用程序的执行来获取输入。然后输出最高分的人名的内存地址。
我试图在现场了解类似问题的答案,但没有任何帮助。
我写的代码是
结构
struct student{
char name;
int marks;
};
函数是
int num,max = 0,i;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%c" , &students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &students[x].marks);
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %c is %p\n", students[max].name , &students[max].name );
它是菜单驱动程序的一部分。它在函数代码的第 5 行之后进入一个奇怪的循环。而且我不能为它创建一个双向链表。
编辑 1
这些是我对 struct 和 func 所做的更改
struct student{
char name[20];
int marks;
};
void memadd(){
int num,max = 0,i, mark;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%s" , &students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &mark);
students[x].marks = mark;
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %s is %p\n", students[max].name , &students[max].name );
它在名称的输入处给出一个数组。 “格式指定类型'char ',但参数有 键入'char ()[20]'"
如何将格式设为 char * [20]?
编辑 2 将字符名称更正为字符数组后的最终工作代码 还有扫描姓名的问题。
struct student{
char name[20];
int marks;
};
int num,max = 0,i, mark;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%19s" , students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &mark);
students[x].marks = mark;
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %s is %p\n", students[max].name , &students[max].name );
但是,如果我想以十六进制数字打印地址怎么办?还是得到的已经是十六进制了。? 因为我得到了 The Memory Add for XYZ is 0x7fb340c03928
的输出【问题讨论】:
-
你的结构中的第一个条目是
char name吗?那当然应该是一个字符数组,例如char name[80],然后应该使用%s进行扫描,或者更好的是%79s。 -
必须删除
&,因为数组name已经指向第一个元素的地址。 -
是的,谢谢。这是代码中唯一剩下的错误。