我的代码要求我打开一个文件。文件的第一行包含 1 到 1000 之间的 2 个整数。我必须读取这 2 个数字,使用它们创建一个与这些数字相对应的二维数组(例如 50,200 是 - 数组 [50] [200])。创建此数组后,我必须读取文件的其余部分并存储数据(在 2 个数字的维度网格中设置)。
解决此问题的最佳方法是什么。我想过做一个getline,然后做一个for循环来将字符附加到行然后列,然后转换为int,但我的编译器不断出现错误。
假设输入总是这种形式(有点不清楚):
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
备注:这是针对您的特定问题集量身定制的,如果:输入不能保证填充整个数组,输入是错误的大小,维度溢出等(许多问题),它将不起作用 - 所以请确保占那些。
文件是二进制文件还是文本文件?如果是二进制,请使用 fread,它可以让您轻松读取原始字节。如果它的文本使用 fscanf