我是 C 的新手,我看到很多一次读取一个文件的示例,但我正在尝试创建一个函数,该函数给定一行文本(实际上是文件名列表)并且它需要一次读取一个单词(文件名)。
例如。我调用函数 words("file1.c file2.c file3.txt");
并且该函数需要读取每个单词(文件名)并通过另一个函数将其放入。
到目前为止我有:
void words(char* line) {
char buf[100];
while (!feof(line)) {
fscanf(line,"%s",buf);
printf("current word %s \n", buf);
}
}
但这不会编译。我得到“从不兼容的指针类型传递‘feof’的参数 1”
编辑 这就是我想出的代码。如果我用 words("test1 test2 test3 test4 ") 调用它似乎工作正常;但如果最后一个字符不是空格,那么输出就会出错。 eg ("test1 test2 test3 test4");
char buf[100];
int word_length = 0;
int n;
while((sscanf(line + word_length,"%s",buf, &n)) == 1) {
printf("current word %s \n", buf);
word_length = word_length + strlen(buf) + 1;
}
我做错了什么?
最佳答案
fscanf
和 feof
函数适用于文件。
字符串对应的函数是sscanf
。
sscanf
的返回值可用于检查您是否设法从字符串中扫描任何内容,以及您应该在字符串中多远的地方寻找下一个单词。
编辑:
辛苦了。还有两个问题。首先,如果单词之间有多个空格,您的代码将失败。此外,如果最后一个单词后没有空格,+ 1
将使您越过空终止符。
第二个问题不加+1就可以解决。这意味着将在前一个项目结束后立即扫描下一个项目。这不是问题,因为 scanf
将跳过初始空白。
可以通过使用 strstr
查找下一个标记在字符串中开始的距离来解决多个空格的问题。
因为 strstr
返回一个指针,我切换到使用指针而不是索引来跟踪字符串的进度。
char *ptr = line;
while((sscanf(ptr,"%s",buf)) == 1) {
printf("current word %s \n", buf);
ptr = strstr(ptr, buf); // Find where the current word starts.
ptr += strlen(buf); // Skip past the current word.
}
关于c - 一次读取一行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19242216/