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

C语言读取文件中以空格分隔的数值的代码问题咨询

解决C语言读取空格分隔数值文件的问题

先给你点出代码里的核心问题:你用fscanf的返回值和0比较是错误的逻辑。fscanf的返回值是成功读取的变量个数,当读到文件末尾(EOF)时会返回EOF(一个定义为-1的宏),而非0。如果保持原有的!=0判断,一旦遇到读取失败(比如文件里出现非数字内容,或者已经读完所有数据),程序会直接陷入死循环——因为每次fscanf都返回0,循环条件一直成立,会不停地重复输出之前读取的旧值。

修正后的代码

#include<stdio.h>
int main() {
    FILE *fp;
    int x,y,t,q;
    // 必须检查文件是否成功打开,避免崩溃
    fp = fopen("sth.xyt","r");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }
    // 判断是否成功读取4个整数,这个逻辑更严谨
    while (fscanf(fp,"%d %d %d %d", &x, &y, &t, &q) == 4) {
        printf("x=%d y=%d theta=%d quality=%d\n", x, y, t, q);
    }
    // 可以额外判断循环退出的原因,方便调试
    if (feof(fp)) {
        printf("Reached end of file.\n");
    } else {
        printf("Error reading file or invalid data format.\n");
    }
    getchar();
    fclose(fp);
    return 0;
}

关键细节说明

  • 文件打开检查:新增了if (fp == NULL)的判断,避免文件不存在、权限不足等情况导致程序直接崩溃,perror会输出具体错误原因,方便你排查问题。
  • 循环条件修正:用==4判断fscanf是否成功读取了4个整数,这样既可以正常遍历所有符合格式的数值组,又能在遇到不符合格式的内容时及时停止,避免无效输出。
  • 空白字符兼容:不管你的数值是每行4个还是连续排列,fscanf会自动忽略空格、换行符等所有空白字符,所以不需要担心换行的问题,都能正确读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:37