c - main 之外的函数中的值不会保留在结构中

标签 c struct

我遇到的问题是,我在主函数之外设置的函数中的值没有保留在结构中。我可能没有很好地描述这一点,所以我将展示程序和结果并解释我想要的内容

 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

因为相同的内容不会打印两次,所以来自 allocateValues 函数的值不会保留在结构中。

最佳答案

功能:

void assignValues( struct Satellite satellite )

应该是:

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

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

按照您最初编写代码的方式,它会创建 satellite1 的副本,并将该副本发送到 assignValues 中。对副本所做的更改不会影响原始版本。

关于c - main 之外的函数中的值不会保留在结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26621717/

相关文章:

c++ - 用 C 重写 C++ 类

c - 使用动态内存分配返回指向结构的指针

java - JNA 通过引用在 C 结构中使用多个 void 指针

c - uchar 的模拟内存数组中的 int

xml - 尝试使用 Golang encoding/xml 将结构编码为 xml 具有交替重复模式的结构

c - 打印棋盘

c - AES 库的错误使用?

使用 printf 和 scanf 的 C 程序在输入时崩溃

C程序通过另一个接口(interface)接收和发送相同的数据包

c - 如何在stm32-discovery上显示时间