我有一个将结构复制到另一个的问题..所以你应该帮助我:) 我想写出最年轻的人,
# include <stdio.h>
# include <string.h>
struct person {
char name[16], surname[21];
int age;
};
int main (){
struct person x[3], min;
int i, min_element;
for(i=0;i<3;i++){
gets(x[i].name);
gets(x[i].surname);
scanf("%d", &x[i].age);
fflush(stdin);
}
min_element=x[0].age;
for(i=0;i<3;i++){
if(min_element>x[i].age)
min=x[i]; // here i want to copy structure
}
puts(min.name);
puts(min.surname);
printf("%d", min.age);
return 0;
}
谢谢你...但另一个问题是屏幕上的文字..它就像: F☻ Bô!小号 2686740
答案 0 :(得分:2)
你的结构有价值语义,即它们没有指针,所以按值复制会做正确的事情,所以你可以简单地说:
myperson1 = myperson2;
答案 1 :(得分:1)
问题可能是当你找到一个较低的元素时你没有改变min_element,所以你总是在测试x [0] .age。你可能想这样做:
if (x[i].age < min_element) {
min = x[i];
min_element = x[i].age;
}
对于复制结构,您还可以使用memcpy
memcpy(&min, &x[i], sizeof(min));
http://linux.die.net/man/3/memcpy
哪会使代码
if (x[i].age < min_element) {
memcpy(&min, &x[i], sizeof(min));
min_element = x[i].age;
}
答案 2 :(得分:0)
由于您的结构仅包含纯数据,因此您的复制完全有效且合理:
min=x[i];
其中x[i]
和min
都属于struct person
类型。但是,您的逻辑中似乎有错误。如果要查找最小age
的结构,请尝试:
min_element=x[0].age;
for(i=0;i<3;i++){
if(min_element > x[i].age) {
min=x[i];
min_element = min.age; // <-- update new minimum
}
}
另请注意,gets
非常危险且已被“弃用”,请改用fgets
或scanf
:
scanf("%15s", x[i].name);
scanf("%20s", x[i].surname);