You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取逗号分隔的TXT文件数据?fscanf无输出问题求助

解决fscanf读取CSV文件无输出的问题

问题场景

需要读取StudentList.txt中的逗号分隔数据,文件内容如下:

Olivia,SWANSON,F,29001,20
Emma,ONEILL,F,7900,19

编写的C语言代码如下:

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

int main() {
    FILE *fp;
    char fname[20];
    char sname[20];
    char gender[2];
    int ID;
    int age;
    fp = fopen("C:\\Users\\Catlover\\Desktop\\DSA\\Program2\\StudentList.txt", "r");
    if(fp == NULL){
        perror("Open fail.");
        exit(1);
    }
    while(fscanf(fp, "%s,%s,%s,%d,%d", fname, sname, gender, &ID, &age) == 5)
    {
        printf("%s, %s, %s, %d, %d\n", fname, sname, gender, ID, age);
    }
    fclose(fp);
    return 0;
}

代码运行后无任何输出,核心问题出在对fscanf的格式匹配逻辑理解有误。

问题原因

fscanf的%s格式符会匹配所有非空白字符(空格、换行、制表符等才算空白字符),直到遇到空白字符才停止。所以第一个%s会把整行Olivia,SWANSON,F,29001,20全部读取到fname数组中(因为逗号不属于空白字符),后续的%s和%d都无法匹配到对应数据,fscanf返回的匹配成功字段数不是5,导致循环根本不会执行,自然没有输出。

解决方法

方法1:修改fscanf格式串,指定字段分隔符

使用%[^,]格式符,它的作用是匹配所有不是逗号的字符,直到遇到逗号为止,刚好适配CSV的逗号分隔规则。修改后的循环部分代码如下:

while(fscanf(fp, "%[^,],%[^,],%[^,],%d,%d", fname, sname, gender, &ID, &age) == 5)
{
    printf("%s, %s, %s, %d, %d\n", fname, sname, gender, ID, age);
}

注意:gender[2]的长度刚好能存储单个字符(比如'F')加上字符串结束符\0,符合要求。

方法2:先读整行再解析(更稳妥)

用fgets先读取整行数据到缓冲区,再用sscanf解析,这种方式可以避免因换行符、多余空格等导致的匹配问题,代码示例:

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

int main() {
    FILE *fp;
    char line[100]; // 足够存储一行数据的缓冲区
    char fname[20];
    char sname[20];
    char gender[2];
    int ID;
    int age;
    fp = fopen("C:\\Users\\Catlover\\Desktop\\DSA\\Program2\\StudentList.txt", "r");
    if(fp == NULL){
        perror("Open fail.");
        exit(1);
    }
    while(fgets(line, sizeof(line), fp) != NULL)
    {
        // 去掉换行符(如果存在)
        line[strcspn(line, "\n")] = '\0';
        if(sscanf(line, "%[^,],%[^,],%[^,],%d,%d", fname, sname, gender, &ID, &age) == 5){
            printf("%s, %s, %s, %d, %d\n", fname, sname, gender, ID, age);
        }
    }
    fclose(fp);
    return 0;
}

内容的提问来源于stack exchange,提问作者catlover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:45:27