c - 从 C 中的文件读取(可变长度)输入

标签 c arrays file-io scanf

我想实现一个从文件读取数据的函数。我可以通过 fscanf 读取数据,但问题是行的长度因行而异,我必须将它们全部存储。该文件具有以下格式:

numberOfStates state1 state2 ... numberOfAlphabts alphabt1 ... transitiontable

这意味着 numberOfStates 决定了其后面有多少个 stateX。如果它是 5,那么我们有 0 1 2 3 4,如果它是 2,那么我们将有 0 1,这与 numberOfAlphabets 的情况相同。假设它是 2,那么后面有一个 b;如果是 5,则该行后面有一个 b c d e。还有另一个问题:transitiontable是一个数组,存储所有状态和字母的组合。例如,如果有两个状态 0 1 和两个字母 a b,则可转换为:

a0 a1

b0 b1 

任何人都可以指导我如何实现这一点吗?如果数据是从 STDIN 而不是文件读取的,我已经实现了它。但我无法理解如何在 fscanf 中初始化转换表。

最佳答案

这是一个简单的程序,用于读取每一行,无论其大小。

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


int read_data(){

    char *line = NULL;
    size_t len = 0;
    char read;
    FILE *fp = fopen("data.txt" , "r") ; 
    if (!fp) {
        printf("No such file or directory.\n");
        return -1 ; 
    } 
    while ( read = getline(&line , &len, fp ) != -1 ) printf("%s", line);
    if (line) free(line) ; 
    return 0 ; 
}

从那时起,如果您想保留,您可以将其存储在数组中。 然后,对于您的问题,您必须进行一些字符串解析(在 C 中可能很困惑)并从 line 变量中获取数据。

关于c - 从 C 中的文件读取(可变长度)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534257/

相关文章:

配置 : error: cannot run C compiled programs

c++ - DEBUG : During Hook procedure call , 它显示 vsjitdebugger.exe 错误

java - 打印数组基值时java中的char数组与int数组

c - 子程序中的 fprintf()

c# - JSON File to Byte[],需要把Byte[]转成JSON字符串

c - 反转链表错误

c - Lua shutdown/End 程序执行回调

java - 在Java中,如何只在内存中创建一个临时文件来解析xml?

c++ - “fArray”未在此范围内声明

arrays - 在 OCaml 中设置二维数组的函数