从C中读取包含未知数量int的txt文件

时间:2013-12-10 16:35:41

标签: c arrays

我必须从.txt文件中读取“N”int并将每一个放入数组X [i] 但问题是,我不知道txt中有多少int。代码必须适用于此模型后的每个txt

5 4
1 2 3
1 3 4
2 3 5
4 5 5

所以我在第一行中有第二个数字(例子中为4),txt中int的数量为N = 4 * 3(4行3个数字(总是第二个数字* 3))+ 2(第一行)
我知道怎么做的唯一代码是当我知道有多少数字时,比如

    int t[14] // I know there are 14 numbers on the .txt
    while(fgets(buf, sizeof(buf), fp)) {

  int result = sscanf(buf, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d", &t[0], &t[1], &t[2], &t[3], &t[4], &t[5], &t[6],&t[7],&t[8],&t[9],&t[10], &t[11],&t[12],&t[13]);
  if (result <= 0) break;  // EOF, IO error, bad data

  for (r=0; r<result; r++) {
    if (i >= sizeof(X)/sizeof(X[0])) break;  // too many
    X[i++] = t[r]; //put them in the X[MAX]
  }
}  

我需要阅读每个数字原因,如同 2 3 5
我将5放到数组[2] [3]
我应该怎么做? 有人能给我看一个例子吗??? 谢谢!

1 个答案:

答案 0 :(得分:1)

一个简单的模板:

int a, b, i;
int *N;
if(fscanf(fp, "%d%d", &a, &b) != 2) { /* Read the first 2 integers */
    /* Unable to read in 2 integers. Handle error... */
}
N = malloc(3 * b * sizeof(int)); /* Allocate enough space */
for(i = 0; i < 3*b; ++i) {
    if(fscanf(fp, "%d", &N[i]) != 1) { /* Read numbers one-by-one */
        /* Input may not be enough. Handle error... */
    }
}
/* Now you have (3*b) integers stored in N */
/* after operations completed... */
free(N);

无需逐行阅读和猜测有多少个数字。只需一次又一次地调用fscanf(),因为您的输入是由空格字符和换行符分隔的。