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

C语言通过管道从标准输入读取内容时如何跳过首行?

实现方案

核心逻辑说明

  • 第一步:直接读取并丢弃stdin的第一行内容,完成表头跳过
  • 第二步:循环读取后续每一行的字段,解析后存入链表节点
  • 第三步:按需求处理链表,最后释放内存避免泄漏

完整代码示例

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

// 可根据你实际定义的结构体调整字段
typedef struct Student {
    char name[32];
    char grade[4];
    float points;
    float average;
    struct Student* next;
} Student;

// 跳过单行内容,适配任意长度的表头
void skip_one_line(FILE* fp) {
    int c;
    while ((c = fgetc(fp)) != '\n' && c != EOF);
}

// 创建新的链表节点
Student* create_student_node(char* name, char* grade, float points, float average) {
    Student* node = malloc(sizeof(Student));
    if (node == NULL) {
        perror("节点内存申请失败");
        exit(EXIT_FAILURE);
    }
    strcpy(node->name, name);
    strcpy(node->grade, grade);
    node->points = points;
    node->average = average;
    node->next = NULL;
    return node;
}

int main() {
    // 跳过表头行
    skip_one_line(stdin);

    Student *head = NULL, *tail = NULL;
    char name_buf[32], grade_buf[4];
    float points_val, average_val;

    // 循环读取后续所有有效数据行
    while (fscanf(stdin, "%s %s %f %f", name_buf, grade_buf, &points_val, &average_val) == 4) {
        Student* new_node = create_student_node(name_buf, grade_buf, points_val, average_val);
        // 尾插法插入链表
        if (head == NULL) {
            head = new_node;
            tail = new_node;
        } else {
            tail->next = new_node;
            tail = new_node;
        }
    }

    // 此处可添加你自己的链表业务逻辑,示例为遍历打印
    Student* iter = head;
    while (iter != NULL) {
        printf("%s %s %.1f %.1f\n", iter->name, iter->grade, iter->points, iter->average);
        iter = iter->next;
    }

    // 释放链表内存
    iter = head;
    while (iter != NULL) {
        Student* temp = iter;
        iter = iter->next;
        free(temp);
    }

    return EXIT_SUCCESS;
}

使用说明

  1. 编译代码后直接使用你提供的命令格式调用即可:./codename < input.txt,不需要修改代码中的读取路径,默认适配标准输入重定向场景
  2. 如果你的Name字段包含空格,将fscanf读取逻辑替换为fgets读整行后按分隔符拆分即可
  3. fscanf会自动跳过字段之间的任意空白符(多空格、制表符、换行符),不需要额外处理格式问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:48:03