为什么我的函数不能使用 C 中的结构?
Why doesn't my function work using structures in C?
我正在创建一个数组,其中包含 space 中的网站位置。所以对于array[2]
,我也想说array[2].num = 2
我希望每个站点都有一个唯一的站点编号num
,从0到N-1。为 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];
}
}
如果我没有正确理解你的问题,我认为你的问题出在你的 fillStruct()
函数上。这个函数中的循环只会执行一次,而不是 N 次。您永远不会超过 k=0,因此您将 num
成员设置为 array[0]
,然后设置 return array[0]
。
当你 return 到你的 main 函数时,你会准确地打印 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
}
现在,当您 return 进入您的主要功能时,您将拥有 20 个编号为 0 到 19 的站点(对于 N=20)。
另请注意,在您提供的代码中,您没有使用 fillStruct()
的 return 值。
希望对您有所帮助,如果我遗漏了什么,请告诉我。
我正在创建一个数组,其中包含 space 中的网站位置。所以对于array[2]
,我也想说array[2].num = 2
我希望每个站点都有一个唯一的站点编号num
,从0到N-1。为 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];
}
}
如果我没有正确理解你的问题,我认为你的问题出在你的 fillStruct()
函数上。这个函数中的循环只会执行一次,而不是 N 次。您永远不会超过 k=0,因此您将 num
成员设置为 array[0]
,然后设置 return array[0]
。
当你 return 到你的 main 函数时,你会准确地打印 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
}
现在,当您 return 进入您的主要功能时,您将拥有 20 个编号为 0 到 19 的站点(对于 N=20)。
另请注意,在您提供的代码中,您没有使用 fillStruct()
的 return 值。
希望对您有所帮助,如果我遗漏了什么,请告诉我。