-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非常に危険であり、ほとんど「非推奨」であることに注意してください。代わりにfgetsorを使用してください。scanf

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