【问题标题】:How to scanning lines, each line differently, in c?如何在c中扫描行,每行不同?
【发布时间】:2024-01-09 12:43:01
【问题描述】:

假设我有这个文本文件,例如:

4 1 2 3 4 3 9 8 7 1 1 2 1 8 7 8 6

我想将第一行 ("4") 存储到一个变量中,而其他行, 以它们显示的方式将它们插入到二维矩阵中(动态二维数组)。

请注意,这只是一个例子,我只知道第一行是一个字符,除了 N*N 矩阵之外,我不知道其余行的 len。

我如何在 C 中做到这一点?

已编辑: 所以矩阵应该只有数字,所以这个 txt 文件: 4 1 2 3 4 3 9 8 7 1 W 2 1 8 7 8 6 是非法的。我该如何处理?

【问题讨论】:

  • 你从文件中得到的第一个值是矩阵的大小,不是吗?到目前为止你做了什么?
  • 正确。我只知道 fscanf 扫描每一行,但想知道“到底有多少参数”向它们插入值。所以我有第一行,我知道它只有 1,但在其他行中,我不知道有多少“数字”
  • 第一行是你在每行中的行数。如果您得到的第一个值是 4,您将需要声明 4x4 二维数组并将矩阵值放入该二维数组中。
  • 多少个“数字”? : 4*4(第一个数字*第一个数字)
  • @user1722022 这个实现...,你写的正是这个问题

标签: c file malloc scanf


【解决方案1】:
#include <stdio.h>
#include <stdlib.h>

int main(void){
    FILE *fp = fopen("data.txt", "r");
    int n;
    fscanf(fp, "%d", &n);
    int (*mat)[n] = malloc(sizeof(int[n][n]));
    int *p = &mat[0][0];

    while(p < &mat[n-1][n])
        fscanf(fp, "%d", p++);
    fclose(fp);
    //check
    for(int r=0; r < n; ++r){
        for(int c=0; c < n; ++c)
            printf("%d ", mat[r][c]);
        printf("\n");
    }
    free(mat);
    return 0;
}

【讨论】:

  • 'while(p
  • 你可以改成int numOfTotal = n*n; while(numOfTotal--)fscanf(fp, "%d", p++);
  • 但是当 fscanf 知道转到下一行时?甚至转到同一行中的下一个字符?
  • @user2637293 %d of fscanf 跳过空白字符(' '(空格),'\n'(换行),'\t'(制表符))。
最近更新 更多