从文本文件

时间:2015-07-31 15:17:57

标签: c arrays

我想编写一个程序来从文本文件创建一个2D双数组。我的文件的内容和格式是

0,0.23645,8.457
4.125,7.102,8.102
1.036,0.547,3.2298,

相同数量的行和相同数量的列。每个数字由一个','区分。每行由一个'\ n'字符区分,最后一个逗号区分。

#include <stdio.h>
#include<conio.h>
void main()
{
  FILE *myfile
  float a,data[10][10];
  char ch;
  int i,j;
  clrscr();
  myfile=fopen("E:\\input.txt", "r");
   for(i = 0; i<3; i++)
  {
    for (j = 0 ; j<3; j++)
    {
      fscanf(myfile,"%f %c",&a,&ch);
      printf("%f ",a);
      data[i][j]=a;
    }
    printf("\n");
  }
  fclose(myfile);
  printf("\n");
  for(i=0;i<3;i++)
  { for(j=0;j<3;j++)
    {   printf("%f ",data[i][j]);
    }
    printf("\n");
  }
  getch();
}

这是有效的,但不是每次都有效。有时候它会给出垃圾值,零或NAN。我不知道为什么相同代码的结果有时会给出正确的或有时错误的值?

在这段代码中,我使行/列的数量保持不变。但如果不知道那我该怎么办?所以,我写了另一段代码。

#include <stdio.h>
#include<conio.h>
void main()
{
  FILE *myfile;
  float a,data[10][10];
  char ch;
  int i,j,line=0,target=0;
  int f=getc(myfile);
   clrscr();
  myfile=fopen("E:\\input.txt", "r");
  while (f!= EOF)
  { if(f=='\n')
    line++;
    f=getc(myfile);
  }
  //printf("%d",line);
  target=++line;
  //printf("%d",target);
  for(i = 0; i<target; i++)
  {
    for (j = 0 ; j<target; j++)
    {
      fscanf(myfile,"%f %c",&a,&ch);
      printf("%f ",a);
      data[i][j]=a;
    }
    printf("\n");
  }
  fclose(myfile);
  printf("\n");
  for(i=0;i<target;i++)
  { for(j=0;j<target;j++)
    {   printf("%f ",data[i][j]);
    }
    printf("\n");
  }
  getch();
}

但它根本不起作用,每次都给出错误的价值观。

请帮助

1 个答案:

答案 0 :(得分:0)

完成以下代码。

#include <stdio.h> #include<conio.h> void main() { FILE *myfile; float a,data[10][10]; char ch; int i=0,j=0,target=-1; clrscr(); myfile=fopen("E:\\input.txt", "r"); while(1) { while(1) { fscanf(myfile,"%f %c",&a,&ch); data[i][j]=a; j++; if(ch=='0') { target=j; break; } else if(j==target) break; } j=0; i++; if(i==target) break; } fclose(myfile); for(i=0;i<target;i++) { for(j=0;j<target;j++) { printf("%f ",data[i][j]); } printf("\n"); } getch(); }

删除了EOF,而不是使用while循环。