用C++从文件中读取二维数组 [英] Reading a 2D array from a file in C
本文介绍了用C++从文件中读取二维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个程序来从文件中读取二维数组,然后将其打印出来。
文件设置为第一行先有行数,然后是列数。之后,将绘制数组。示例如下:
3 5
10.4 15.1 18.5 13.3 20.8
76.5 55.3 94.0 48.5 60.3
2.4 4.6 3.5 4.6 8.9
我的问题是我只知道如何使用fgets和sscanf读取每行的第一个元素,所以以下数字被忽略。
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]){
FILE* f = fopen("plottestdata", "r");
char size[20];
int height, width,ii=0,cc,jj,kk;
float array[100][100];
char horiz[500];
if(fgets(size, 20, f)!= NULL){
sscanf(size,"%d %d", &height, &width);
printf("%d %d
",height, width);
}
while(fgets(horiz, 500, f)!=NULL)
{
if(ii<height)
{
for(cc=0;cc<width;cc++)
{
sscanf(horiz, "%f", &array[ii][cc]);
}
ii++;
}
}
for(jj=0;jj<width;jj++)
{
for(kk=0;kk<height;kk++)
{
printf("%f ", array[jj][kk]);
}
}
fclose(f);
return 0;
}
这使我多次重复输出每行的第一个元素,我理解其中的原因,但不确定如何修复它。它正在读取的文件实际上是一个20x20数组,尽管其格式与示例相同。
此外,为了尝试缩短一个较长的问题,我忽略了错误检查。
推荐答案
我忍不住要调整和简化您的代码,太接近了,为了避免使用fgets
而使用fscanf
直接读取值。加上基本错误检查。
#include <stdio.h>
#include <stdlib.h>
#define MWIDTH 100
#define MHEIGHT 100
int main(void){
FILE* f;
int height, width, ii, jj;
float array[MHEIGHT][MWIDTH];
if((f = fopen("plottestdata.txt", "r")) == NULL)
exit(1);
if(fscanf(f, "%d%d", &height, &width) != 2)
exit(1);
if (height < 1 || height > MHEIGHT || width < 1 || width > MWIDTH)
exit(1);
for(jj=0; jj<height; jj++)
for(ii=0; ii<width; ii++)
if(fscanf(f, "%f", &array[jj][ii]) != 1)
exit(1);
fclose(f);
for(jj=0; jj<height; jj++){
for(ii=0; ii<width; ii++)
printf ("%10.1f", array[jj][ii]);
printf("
");
}
return 0;
}
程序输出:
10.4 15.1 18.5 13.3 20.8
76.5 55.3 94.0 48.5 60.3
2.4 4.6 3.5 4.6 8.9
这篇关于用C++从文件中读取二维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文