嘿我一直在试图计算我的文本文件中的单词数量,从C加载一堆Hangman游戏的单词,但我正在打砖墙。我正在使用的这段代码假设我正在使用这段代码;
FILE *infile;
FILE *infile;
char buffer[MAXWORD];
int iwant, nwords;
iwant = rand() %nwords;
// Open the file
infile = fopen("words.txt", "r");
// If the file cannot be opened
if (infile ==NULL) {
printf("The file can not be opened!\n");
exit(1);
}
// The Word count
while (fscanf(infile, "%s", buffer) == 1) {
++nwords;
}
printf("There are %i words. \n", nwords);
fclose(infile);
}
如果有人对如何解决此问题有任何建议,我将非常感激。
文本文件每行有1个单词,有850个单词。
应用了缓冲区建议,但字数仍然是1606419282。
更正
int nwords = 0;
工作!非常感谢你!
答案 0 :(得分:2)
所以单词每行一个条目?
while (fscanf(infile, "%s", &nwords) == 1); {
++nwords;
}
不按照您的想法行事。它读取nwords中的字符串,这不是字符串。
如果你想这样做那么你需要分配一个字符串,即char buffer[XXX]
,它足够长,以包含数据文件中最长的留置权并使用:
while (fscanf(infile, "%s", buffer) == 1) {
++nwords;
}
答案 1 :(得分:1)
变量nwords
永远不会被初始化。你不能假设它从零开始。
如果是的话,你会在下一行遇到崩溃(“除以零”),其目的无法实现:
iwant = rand() %nwords;
所以,替换
int iwant, nwords;
iwant = rand() %nwords;
通过
int nwords = 0;
答案 2 :(得分:0)
建议更改:
fscanf(infile,“%s”,& buffer)//注意空间!!!并且&在缓冲区之前
它将抛弃所有空格直到下一个单词。它应该有效。
P.S。最好不要使用[f] scanf: - )