我的问题是,在main外部设置的函数中的值未保留在结构中。我可能对此描述得不太好,所以我将展示程序和结果并解释我要

 struct Satellite
{
    char countries[30];
    int package;
    int priceperpackage;
    int timetransmission;
    int requestedTransmission;
};

struct Satellite Satellite1;
struct Satellite Satellite2;
struct Satellite Satellite3;
struct Satellite Satellite4;
struct Satellite Satellite5;

void functionInput(void)
{
    /*Country 1*/
    strcpy(Satellite1.countries, "USA");

    /*Country 2*/
    strcpy(Satellite2.countries, "China");

    /*Country 3*/
    strcpy(Satellite3.countries, "Germany");

    /*Country 4*/
    strcpy(Satellite4.countries, "Japan");

    /*Country 5*/
    strcpy(Satellite5.countries, "Switzerland");
}

void printItems( struct Satellite satellite );

void assignValues( struct Satellite satellite );

int main(void)
{
    functionInput();

    assignValues ( Satellite1 );
    assignValues ( Satellite2 );
    assignValues ( Satellite3 );
    assignValues ( Satellite4 );
    assignValues ( Satellite5 );

    printItems ( Satellite1 );
    printItems ( Satellite2 );
    printItems ( Satellite3 );
    printItems ( Satellite4 );
    printItems ( Satellite5 );

    return 0;
}

void printItems( struct Satellite satellite )
{
    printf( "%s\t\t %d\t\t %d\t\t %d\t\t %d\n",          satellite.countries,satellite.requestedTransmission,satellite.package,satellite.priceperpackage,sat llite.timetransmission);
}

void assignValues( struct Satellite satellite )
{
    satellite.requestedTransmission = (rand()% 2);
    satellite.requestedTransmission = (rand()% 4 +1);
    printf( "%s\t\t %d\t\t %d\t\t %d\t\t %d\n",     satellite.countries,satellite.requestedTransmission,satellite.package,satellite.priceperpackage,sate    llite.timetransmission);
}


这是输出

USA              4               0               0               0
China            1               0               0               0
Germany          1               0               0               0
Japan            3               0               0               0
Switzerland              1               0               0               0
USA              0               0               0               0
China            0               0               0               0
Germany          0               0               0               0
Japan            0               0               0               0
Switzerland              0               0               0               0


因为同一件事不会被打印两次,所以assignValues函数的值不会保留在结构中。

最佳答案

功能:

void assignValues( struct Satellite satellite )


应该:

void assignValues( struct Satellite *satellite )
{
    satellite->requestedTransmission = (rand()% 2);


等,您可以通过编写assignValues( &satellite1 );等来调用它。这是您指示希望assignValues在名为satellite1的对象上进行操作的方式。

最初编写代码的方式是创建satellite1的副本,并将该副本发送到assignValues。对副本所做的更改不会影响原件。

09-12 06:20