我的问题是,在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
。对副本所做的更改不会影响原件。