-1

我在将结构复制到另一个时遇到问题.. 你能帮我吗:) 我想写出最年轻的人,,

# 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ô!s 2686740

4

3 回答 3

2

您的结构具有值语义,即它们没有指针,因此按值复制将做正确的事情,因此您可以简单地说:

myperson1 = myperson2;
于 2013-11-01T19:30:45.030 回答
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;
}
于 2013-11-01T19:31:50.717 回答
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是非常危险且几乎“已弃用”的,请使用fgetsorscanf代替:

scanf("%15s", x[i].name);
scanf("%20s", x[i].surname);
于 2013-11-01T19:37:09.420 回答