为什么我的函数不能在C语言中使用结构?

问题描述 投票:0回答:1

我正在创建一个包含空间中站点位置的数组。因此,对于array[2],我也想说array[2].num = 2,我希望每个站点都有一个从0到N-1的唯一站点编号num。为array[i].num输出不同的i值得到0、1、32767。而对于增加i,我希望看到从0到N-1的递增值。

我对结构非常陌生,因此,如果您能解释我在哪里犯错误,我将非常感谢您作为新手程序员的帮助。

 typedef struct site_t
{
    int num; // want to add more varaibels later hence type struct //
} site;
site fillStruct( site[], int);
int main()
{   int i;
    const int N = 20;
    site array[N];
    fillStruct(array, N);
    for (i = 0; i < N; i++) {
    printf("location of site %d\n", array[i].num);
}
}

site fillStruct(site array[], int size) {
    for (int k = 0; k < size; k++) {;
        array[k].num = k;   
        return array[k];
        } 

}
c arrays function structure
1个回答
0
投票

如果我正确理解了您的问题,我认为您的问题来自fillStruct()函数。此函数中的循环仅执行一次,而不是N次。您永远不会超过k = 0,因此将num成员设置为array[0],然后返回array[0]

返回主功能时,将精确打印array[0]的位置,但是数组中的后续站点编号只是随机的未初始化值。

相反,您希望return语句位于循环块之外,因此该函数应类似于...

site fillStruct(site array[], int size) {
    int k; 

    for (k = 0; k < size; k++) {;
        array[k].num = k;
    }

    return array[k-1]; // Returns the last site in the array
}

现在,当您返回主功能时,将有20个站点,编号为0到19(对于N = 20)。

还请注意,在您提供的代码中,您没有使用fillStruct()的返回值。

希望有帮助,如果我错过了什么,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.