我想实现一个从文件读取数据的函数。我可以通过 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/