【问题标题】:Reading 2 integers from a file in c从c中的文件中读取2个整数
【发布时间】:2013-08-14 12:45:48
【问题描述】:

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

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

【问题讨论】:

  • 您能否提供您使用的产生该错误的代码?有很多方法可以解决这个问题,最好能帮助指导您了解解决问题的方法。
  • 我感到沮丧时删除了它。我只是想知道这是否是一个好方法,还是我忽略了一些非常简单的方法?
  • 我在下面提供了一个通用方法——如果您仍然拥有代码,它可能更适合您的确切方法。希望对你有所帮助。

标签: c arrays file-io


【解决方案1】:

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

【讨论】:

  • 它在文本中,因为第一行是 2 个整数,其余由以下组成:@ 。 / \ =
  • fscanf 工作得很好,谢谢,我知道这是非常简单的事情
【解决方案2】:

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

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

备注:这是针对您的特定问题集量身定制的,如果出现以下情况,它将不起作用:输入不能保证填充整个数组,输入是尺寸错误、尺寸溢出等(很多问题) - 所以一定要考虑这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多