我正在尝试从文件中读取文字。该文件是一个文本,并包含一些单词。在我的文本中,我有大约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
?
答案 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
的目的是什么?