c - 一次读取一行字符

标签 c file-io

我是 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;
}

我做错了什么?

最佳答案

fscanffeof 函数适用于文件。

字符串对应的函数是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/

相关文章:

c - 为什么 open() 使用错误的权限创建我的文件?

c - 如何制作斐波那契方程? (关于未初始化变量的错误)

c - WM_TIMER 在特定条件下丢失

c - 在 C 中运行程序时出现总线错误

清除屏幕和缓冲区

java - 更新文本文件定界符java

java - 如何在 Java 中删除目录内容?

java - codechef 和 spoj 问题中使用模 10^9+7 的意义是什么?

c++ - 读取文件时缓冲区大小会影响时间成本吗?

C#:Server.Mappath 如何读取文件?