gpt4 book ai didi

c - 如何从 C 中的二维数组中读取多个文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:41 24 4
gpt4 key购买 nike

我必须编写一个程序,在 for 循环中读取多个文件并计算该文件的单词、句子和音节。我在函数 CountWords 中的代码如下所示:(文件名是一个二维数组,其中存储了 17 个文件的名称)

for (i = 0; i < 17; ++i) {
inputfile = fopen(filenames[i], "r");
if (inputfile == NULL) {

printf("File cannot be found, verify %s is in the correct location.\n", filenames[i]);
}
int c;

while (c != EOF) {

c = getc(inputfile);
//code to count words/syllables/sentences

}
fclose(inputfile);

虽然它在第 0 个元素中成功地将其计算为文件,但其余元素的结果为零个单词、零个句子、零个音节。我做错了什么吗?谢谢你的见解

最佳答案

您可以尝试使用“getc”而不是 fscanf 来读取单个字符(如果您没有读取 UTF-8?),但我认为这不是本例中的问题。

如果您当前的代码在 2 个文件后停止,可能是该文件不存在或不可读,在这种情况下,我相信 fopen 将返回 null 并在 errno 中设置一个错误值。您的代码(除非您已针对帖子对其进行了简化)不会检查 fopen 的失败结果,因此此时它可能会因段错误而崩溃。

为了找出发生了什么,我建议检查所有文件名是否存在且可读,并在代码中,添加对 pInputFile 值的检查

我已经很久没用过 C 了,但是像这样:

#include <errno.h>
pInputFile = fopen(inputFile,"r');
if(!pInputFile)
{
fprintf(STDERR, "Failed opening %s [error %d]",inputFile,errno());
return -1;
}

然后在你的循环中,检查返回值 < 0例如:

int count=0;
for (i = 0; i < 18; ++i) {
count = CountWords(filenames[i]);
if(count < 0)
{
//discard the result
}
else
{
// do something with the result
}
}

祝你好运

正如 Hurlu 指出的那样,您已将循环中的文件数硬编码为 18。也许这与数组的大小不匹配。C 中通常的约定是将数组中的一些项目也传递给你的函数,并在你的 for 循环中使用它而不是固定数字 '18'

此外,如果您的文件名数组由其他函数填充,它可能已将无效名称或空值放入数组中。

关于c - 如何从 C 中的二维数组中读取多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com