0

我的代码要求我打开一个文件。文件的第一行包含 1 到 1000 之间的 2 个整数。我必须读取这 2 个数字,使用它们创建一个与这些数字相对应的二维数组(例如 50,200 是 - 数组 [50] [200])。创建此数组后,我必须读取文件的其余部分并存储数据(在 2 个数字的维度网格中设置)。

解决此问题的最佳方法是什么。我想过做一个getline,然后做一个for循环来将字符附加到行然后列,然后转换为int,但我的编译器不断出现错误。

4

2 回答 2

0

假设输入总是这种形式(有点不清楚):

2,4
aaaa
b  b

...然后一种方法是读取矩阵的维度(行数,列数),然后通过一次读取一个字符的矩阵的每个元素来跟进。这将是这样的:

int rows = getchar();

// Skip ','.
getchar();

int cols = getchar();

int arr[ rows ][ cols ];
int r = 0;
int c = 0;

for ( int byte = getchar(); byte != EOF; byte = getchar(), c++ ) {
  if ( c == cols ) {
    c = 0;
    r++;
  }

  arr[ r ][ c ] = byte;
}

...并且您需要将输入文件通过管道传输到您的程序,如下所示:

./program.out < input.txt

备注:这是针对您的特定问题集量身定制的,如果:输入不能保证填充整个数组,输入是错误的大小,维度溢出等(许多问题),它将不起作用 - 所以请确保占那些。

于 2013-08-14T04:39:39.070 回答
0

文件是二进制文件还是文本文件?如果是二进制,请使用 fread,它可以让您轻松读取原始字节。如果它的文本使用 fscanf

于 2013-08-14T04:35:33.870 回答