我是C的新手,我看到很多一次只读一个文件的例子,但是我正在尝试创建一个给出一行文本(实际上是文件名列表)的函数,它需要一次读一个单词(文件名)。
EG。我调用函数,单词(“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”
编辑所以这是我提出的代码。如果我用单词调用它(“test1 test2 test3 test4”),它似乎工作正常;但如果最后一个字符不是空格,那么它在输出中有错误。例如(“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;
}
我做错了什么?
答案 0 :(得分:2)
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.
}