使用文本文件中的C计算单词数

时间:2011-12-09 21:43:10

标签: c words counting

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

工作!非常感谢你!

3 个答案:

答案 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)

  1. 读完第一个单词和后面的空白后,你的fscanf RETURNS输入缓冲空白。所以,下次你读EMPTY字时。
  2. 建议更改:

    fscanf(infile,“%s”,& buffer)//注意空间!!!并且&在缓冲区之前

    它将抛弃所有空格直到下一个单词。它应该有效。


  3. P.S。最好不要使用[f] scanf: - )