所以我试图找到一种更新变量的方法,我试图让它变得全局,所以我可以轻松地改变它。唯一的问题是它不工作,我不知道如何解决它。
我想让SIZE_ARRAY更改为每次调用remove_unimportant_words函数时的值。
Decleration:
int SIZE_ARRAY = 480;
char list[SIZE_ARRAY][MAX];
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);
int main():
while (fscanf(file, "%s", word) != EOF){
remove_unimportant_words(word, SIZE_ARRAY, list, j, i);
}
功能:
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i)
{
for (i=0; i<SIZE_ARRAY; i++) {
if(strcmp(list[i],word) == 0){
for (j=i; j<SIZE_ARRAY; j++) {
strcpy(list[j], list[j+1]);
}
SIZE_ARRAY--;
i--;
}
}
printf("%d\n", SIZE_ARRAY);
}
我基本上尝试打印SIZE_ARRAY的值,并且在进入函数时总是从480开始。
答案 0 :(得分:1)
当你在函数remove_unimportant_words
中传递 SIZE_ARRAY 作为参数时,这不再在该函数中用作全局..所以全局 SIZE_ARRAY 仍然存在相同。
您不应将 SIZE_ARRAY 作为参数传递。希望您的代码能够按预期工作。
void remove_unimportant_words(char word[MAX], char list[SIZE_ARRAY][MAX] , int j, int i)
{
...
答案 1 :(得分:1)
如果SIZE_ARRAY
是您所说的全局变量,则无需将另一个整数参数传递给函数remove_unimportant_words()
。
您传递给remove_unimportant_words()的SIZE_ARRAY
有效地使用名为SIZE_ARRAY
的无关,新分配的变量的本地副本来影响全局变量在函数返回时释放。
本质上:
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);
int SIZE_ARRAY
参数与实际的全局SIZE_ARRAY变量没有关系,应该被删除,以便函数体内的代码直接引用全局SIZE_ARRAY
变量。
如果您只想将SIZE_ARRAY
从一个函数传递到另一个函数,您也可以使用地址和指针通过引用传递变量。
作为附注,您确定您提供的代码是否已编译?我看到很多语法似乎没有效果......
答案 2 :(得分:0)
只是不要使用SIZE_ARRAY
作为参数,函数remove_unimportant_words
可以像往常一样访问它