我需要扫描文件中的字母以形成乱序的单词。一切看起来都不错,但调试器不执行该命令。任何建议将不胜感激。
代码:
void playGame(char array1[SIZE], FILE*aPtr)
{
aPtr = fopen("words.txt", "r");
int i;
for (i = 0; i < SIZE; i++){
fscanf(aPtr, " %c", array1[i]);
printf("%c", array1[i]);
}
}
这是我在 main 中调用函数的方式
playGame(&scramble[SIZE], inPtr);
数组 scramble[] 被声明为 FILE*inPtr,此外,SIZE 定义为 10。
最佳答案
在您的调用代码中,您有:
FILE *fp = 0;
char game[SIZE];
假设您在函数中打开文件,但没有关闭它,您需要在函数中更改文件,因此调用可能是:
playGame(game, &fp);
if (fp != 0)
fclose(fp);
但是函数应该改为:
void playGame(char array1[SIZE], FILE **aPtr)
{
FILE *fp = fopen("words.txt", "r");
if (fp != 0)
{
*aPtr = fp;
...other code...
}
}
或者,应该在调用代码中打开和关闭文件,并将文件指针简单地传递给 playGame()
:
FILE *fp = fopen("words.txt", "r");
if (fp != 0)
{
playGame(game, fp);
fclose(fp);
}
使用此接口(interface),playGame()
中没有 fopen()
(或 fclose()
)调用,这会保持其当前状态接口(interface)(void playGame(char game[SIZE], FILE *fp)
)。这更有意义。通常,打开文件的函数也负责关闭文件是正确的。也有异常(exception),但并不是全部。
关于c - 如何在函数中调用文件指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823926/