我试图从txt文件中将输入数据输入指针数组。然后将数组显示(打印)为方形2-d数组。下面是tstfile。第一个数字9是N(即nxn),它设置2d数组的大小。我能够使用fgetc并将其设置为我的int值N.接下来我想在文本文件中获取9x9array并将值放入指针数组中,这就是我遇到麻烦的地方。关于我可以采取的方法的任何建议。
9
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int **A;
FILE *file;
char ch;
int i;
int j;
int N;
int t;
if ( argc != 2 ) /* argc should be 1 for correct execution */
{
printf( "you need to input one argument\n");
}
else {
file = fopen(argv[1], "r"); //opens file name
if(file == 0)
printf("File couldnt me opened\n");
else {
if((ch=fgetc(file))!=1){
N = ch - '0' ;
}
A = malloc(N * sizeof(int *));
for (i = 0; i < N; i++)
A[i] = malloc(N * sizeof(int));
while((ch=fgetc(file)) != EOF){
i=4;
//for (i=1;i<N;i++)
// for (j=1;j<N;j++)
if(i<N)
A[i][i]= ch2 - '0' ;
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", A[i][j]);
printf("\n");
}
fclose( file );
}
}
}
答案 0 :(得分:0)
要解决的问题:
阅读N
if((ch=fgetc(file))!=1){
N = ch - '0' ;
}
如果文件的第一个字符是除了其中一个数字之外的其他任何字符,则会给出错误的N
。此外,如果N
大于9
,您将使用错误的值。将其更改为
if ( fscanf(file, "%d", &N) != 1 ){
// Problem.
// Do something about it.
}
用于读取矩阵数据的行根本没有意义。
while((ch=fgetc(file)) != EOF){
i=4; // Why is i set to 4 here?
if(i<N) // This will always be true when N >= 4
A[i][i]= ch2 - '0' ;
此外,您无法使用fgetc
来读取数字,因为fgetc
不会跳过空格。你的代码可以简单得多。
for (j = 0; j < N; j++)
{
if ( fscanf(file, "%d", &A[i][j]) != 1 )
{
// Problem.
// Do something about it.
}
}