【发布时间】:2023-03-07 07:41:01
【问题描述】:
我知道已经有几个关于这个主题的问题,但似乎这些问题要么没有完全回答,要么很难应用到我的代码中,所以如果这是重复的,我深表歉意。 我在一个也可以进行字数和行数计数(这些工作)的整体 I/O 程序中使用以下函数时遇到问题。 char* 文件名是从命令行中提取的。在这个例子中,它是从一个带有 lorum ipsum 的 txt 文件中提取的。 (69 字)理论上,下面的函数应该从文件名中读取并将其写入数组。然后读取该数组并检查当前字符是否为空格 ' ' 而下一个字符不是。不管怎样,它目前都返回 0。
int wordcount(char* filename) {
int wc=0,i=0,z=0;
char w, test[1000];
FILE *fp;
fp = fopen(filename, "r");
while (feof(fp) == 0) {
fscanf(fp, "%c", &test[i]);
i++;
}
while (z>i-1) {
if (test[z] = ' ' && test[z+1] != ' ' ) {
wc++;z++;
}
}
return wc;
}
注意:我知道声明一个 1000 个字符的数组非常低效,但我不知道该怎么做。如果您有任何改进或其他方法来完成此操作,如果您分享,将不胜感激。另外,我知道这目前忽略了其他类型的空白,但我只是先测试它,然后再扩展。
感谢您的帮助。
【问题讨论】:
-
谢谢!我不知道为什么我们会被教导使用 feof 然后幽默地纠正输出,而不是仅仅使用正确的方法。 /叹息
-
'我知道声明一个 1000 个字符的数组是非常低效的,'你应该将 fscanf 读取的字符限制为 999,以防万一,但不要害怕过大的数组。每隔几天,我们就会得到一个 bean-counter,它费力地尝试保存每个字节,因此最终声明数组太小,忘记了 NUL 终止符等。
标签: c file-io word-count