从文件中读取单词不能正常工作

时间:2015-10-26 14:12:53

标签: c file io

我正在尝试从文件中读取文字。该文件是一个文本,并包含一些单词。在我的文本中,我有大约10个单词。 Evertime虽然我运行代码我只得到第一个字。我做错了什么?

#include<stdio.h>
#include<stdlib.h>
#define WORDLEN 30

/* Given the name of a file, read and return the next word from it, 
or NULL if there are no more words */

char *getWord(char *filename)  {
    char formatstr[15], *word;
    static FILE *input;
    static int firstTime = 1;
    if (firstTime) { 
        input = fopen(filename, "r");
        if (input == NULL) {
            printf("ERROR: Could not open file \"%s\"\n", filename);
            exit(1);
        }
        firstTime = 0;
    }
    word = (char*)malloc(sizeof(char)*WORDLEN);
    if (word == NULL) {
        printf("ERROR: Memory allocation error in getWord\n");
        exit(1);
    }
    sprintf(formatstr, "%%%ds", WORDLEN-1);
    fscanf(input, formatstr, word);
    if (feof(input)) {
        fclose(input);
        firstTime = 1;
        return NULL;
    }


    printf("%s", word)
    return word;
}

int main()
{
    char a[] = "tinydict.txt";
    getword(a)
}

我是否需要在一个循环中添加所有这些?如果是,我将不得不使用EOF

2 个答案:

答案 0 :(得分:1)

像这样写你的循环 -

 while(fscanf(input, formatstr, word)==1){   // this will read until fscanf is successful
   printf("%s", word);
 }

此外,您在功能本身中打印word,那么为什么你return来自功能?当你在main中调用它时,你不会将它分配给任何东西,你只需要写 -

 getword(a);
main中的

。那么为什么不将函数声明为void

答案 1 :(得分:1)

循环可以这样写:

while (!feof(input)){
    if (fscanf(input, formatstr, word) == 1){
        printf("%s", word);
    }
}

使用firstTime的目的是什么?