我必须从.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]
我应该怎么做?
有人能给我看一个例子吗???
谢谢!
答案 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()
,因为您的输入是由空格字符和换行符分隔的。