c - 用C读取带有空格的文件.txt

标签 c fopen fclose

我尝试用 C 语言打开一个简单的 txt 文件,如下图所示。

list example

输入文字:

Name    Sex Age Dad Mom 
Gabriel M   58  George  Claire          
Louise  F   44          
Pablo   M   19  David   Maria

我的疑问是,我怎样才能识别列表中的空格并正确跳转到另一行。

这是我的代码:

#include <stdio.h>

int main() {
    FILE *cfPtr;

    if ((cfPtr = fopen("clients.txt", "r")) == NULL) {
        puts("The file can't be open");
    } else {
        char name[20];
        char sex[4];
        int age;
        char dad[20];
        char mom[20];
        char line[300];

    printf("%-10s%-10s%-10s%-10s%-10s\n","Name","Sex","Age","Dad","Mom");
    fgets(line,300,cfPtr);
    fscanf(cfPtr,"%10s%10s%d%12s%12s",name,sex,&age,dad,mom);

    while (!feof(cfPtr)) {
        printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
        fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
    }

        fclose(cfPtr);
    }
    return 0;
 }

如果我填写所有空格,效果很好...

最佳答案

printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);

将顺序更改为先阅读,后打印。

理想情况下,文件中的数据应以逗号、制表符或其他字符分隔。如果数据位于固定列中,则将所有内容读取为文本(包括整数),然后稍后将整数转换为文本。

还要检查 fscanf 的返回值,如果结果不是 5,则说明某些字段丢失。

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

int main() 
{
    FILE *cfPtr = fopen("clients.txt", "r");
    if(cfPtr == NULL) 
    {
        puts("The file can't be open");
        return 0;
    }

    char name[11], sex[11], dad[11], mom[11], line[300];
    int age;

    fgets(line, sizeof(line), cfPtr); //skip the first line
    while(fgets(line, sizeof(line), cfPtr))
    {
        if(5 == sscanf(line, "%10s%10s%10d%10s%10s", name, sex, &age, dad, mom))
            printf("%s, %s, %d, %s, %s\n", name, sex, age, dad, mom);
    }

    fclose(cfPtr);
    return 0;
}

编辑,更改 sscan 格式以直接读取整数,将缓冲区分配更改为 11,这就是所需要的。

关于c - 用C读取带有空格的文件.txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107823/

相关文章:

c - 如果我们改变 char* ptr = ; 指针指向的地址会改变吗?

php - 想通过 php 站点运行我的 Windows 服务器上的 exe 文件

c - 如果我不关闭 C 中的文件

C - fclose() 触发断点

C 将结构体写入数组

C程序: Changing the string in a function by using double pointer

c - 尝试使用子进程和父进程打开文件时不断出现段错误?

javascript - PHP/Javascript - 从巨大的日志文件中实时读取添加的行

c++ - ofstream/fstream 根本行不通,无论尝试什么解决方案

c - 如何使用 poll() 检测超时的客户端?