0

嘿,我一直在尝试计算我的文本文件中的单词数,从 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; 

工作!非常感谢!

4

3 回答 3

2

所以单词是每行一个条目?

while (fscanf(infile, "%s", &nwords) == 1); {
    ++nwords;
}

不做你认为它做的事。它读取 nwords 中的字符串,它不是字符串。如果你想这样做,那么你需要分配一个字符串,即char buffer[XXX]它足够长以包含数据文件中最长的留置权并使用:

while (fscanf(infile, "%s", buffer) == 1) {
    ++nwords;
}
于 2011-12-09T21:46:22.640 回答
1

该变量nwords永远不会被初始化。你不能假设它从零开始。

如果是这样,您将在下一行遇到崩溃(“除以零”),其目的使我无法理解:

iwant = rand() %nwords;

所以,更换

int iwant, nwords; 
iwant = rand() %nwords;

经过

int nwords = 0;
于 2011-12-09T21:58:49.787 回答
0
  1. 在读取第一个单词和之后的空格后,您的 fscanf 返回输入缓冲区空白。所以,下次你读 EMPTY 字的时候。
  2. 建议更改:

    fscanf(infile, "%s ", &buffer) // 注意空格!!!和 & 之前的缓冲区

    它将丢弃所有空格,直到下一个单词。它应该工作。


PS 最好不要使用 [f]scanf :-)

于 2011-12-09T22:08:01.520 回答