#include<stdlib.h>
#include<stdio.h>
int main() {
FILE* file = fopen ("fourth.txt", "r");
int i = 0;
int rows=0;
int rows2=0;
int columns=0;
int counter=0;
int length=0;
int multiply=0;
fscanf (file, "%d", &i);
rows=i;
printf("the rows are %d\n", i);
int matrix[rows][rows];
length=rows*rows;
if (rows<=0) {
printf("error, this file cannot be processed");
return 0;
}
do
{
if (fscanf(file, "%d", &i)==1) {
if (counter<length) {
matrix[rows2][columns]=i;
counter++;
columns++;
if (columns==rows) {
rows2++;
columns=0;
}
}
multiply=i;
}
} while (!feof(file));
fclose (file);
for ( int c = 0; c < rows; c++ ) {
for ( int j = 0; j < rows; j++ ) {
printf("matrix[%d][%d] = %d\n", c,j, matrix[c][j] );
}
}
printf("the multiply is %d", multiply);
我正在尝试创建矩阵指数(换句话说,矩阵乘法)。但是,在执行实际的数学过程之前,我必须从txt文件中读取数字作为输入并将其存储在2d数组中。以上是到目前为止我从代码中获得的信息,但是,我正在努力将数字实际输入到数组中,因为当我在最后测试2d数组时,我得到的结果很奇怪。
例如:1.输入:
3
123
456
789
2
3表示行数,此行与该特定2d数组的列数相同,因为矩阵为正方形,这意味着所有行和列都相同。
2代表指数,这是我必须乘以原始矩阵的次数。
但是我的输出是
矩阵[0] [0] = 123
矩阵[0] [1] = 456,
矩阵[0] [2] = 789
矩阵[1] [0] = 2
矩阵[1] [1] = 4214800
矩阵[1] [2] = 0
矩阵[2] [0] = 3
矩阵[2] [1] = 0
矩阵[2] [2] = 0
预期输出必须为:
123
456
789
在二维数组中
有什么理由吗?
另外,我将如何修改代码,以便无论txt文件中关于不同行和列的输入是什么,我仍然可以格式化适当的2d数组。谢谢
在输入文本文件中,一行中的数字不会以任何方式分开。如果需要多位数字,请考虑使用空格或分号之类的符号将它们分开。
如果矩阵只有一位整数(即从0到9的数字),那就很好了。
但是,如果一行中的3个数字分别是21、13和4,那么在输入文件中它将是just 21134
。
无法找到它是211,3,4还是21,1,34或2,113,4或.......
随着fscanf()
在你的程序中,每个%d
将读取整行考虑它是一个数字,并将其分配给变量i
。
与其先将尺寸读入i
然后复制为rows
喜欢
fscanf (file, "%d", &i);
rows=i;
您可以直接阅读 rows
fscanf( file, "%d", &rows);
并读取类似的值
for(rows2=0; rows2<rows; ++rows2)
{
if( fscanf(file, "%1d%1d%1d", &matrix[rows2][0], &matrix[rows2][1], &matrix[rows2][2]) != 3)
{
perror("Error");
break;
}
}
然后multiply
像这样读取最后的值
fscanf(file, "%d", &multiply);
您可以检查返回值fscanf()
以检查是否发生任何错误。
您曾经!feof(file)
检查文件结尾。我不太了解,但在这里看看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句