我在初学者编程课中有一项任务,要求我乘以矩阵。矩阵在文本文件中定义如下:
4 5
1 5 3 2 6
3 5 4 6 3
3 5 7 5 4
4 7 8 9 7
5 3
7 1 31
0 0 5
-5 -3 2
9 41 11
0 13 31
第一个数字是行,第二个是列。然后显示矩阵,并重复第二次。程序必须将数据输入到两个不同的二维数组中,将它们相乘,然后生成结果。
我理解如何进行乘法,但我不确定如何在不使用文件流的情况下将文本从文件转换为数组。我们必须使用标准输入流将输入定向到程序。 所以它应该能够在unix平台上运行如下:
./matrix < input.txt
我应该使用scanf吗?获得?与fgets?我是一个相当流利的java程序员,但对C来说是全新的。谢谢!
答案 0 :(得分:1)
由于您只处理数字,因此使用scanf
可以正常工作。只是使用就像你只是从用户那里获取输入。当没有经验的用户一起使用gets
和scanf
时会出现问题。
int row,col,matrix[maxrow][maxcol];
scanf("%d %d",&row,&col);
for(int i = 0;i < row;i++)
{
for(int j = 0;j < col;j++)
{
scanf("%d %d",&matrix[i][j);
}
}
答案 1 :(得分:0)
一个没有检查的简单例子。
#include <stdio.h>
void input(int row, int col, int m[row][col]){
for(int r = 0; r < row ; ++r){
for(int c = 0; c < col ; ++c){
scanf("%d", &m[r][c]);
}
}
}
void print(int row, int col, int m[row][col]){
for(int r = 0; r < row ; ++r){
for(int c = 0; c < col ; ++c){
printf("%d ", m[r][c]);
}
printf("\n");
}
}
int main(){
int row1, col1;
scanf("%d %d", &row1, &col1);
int m1[row1][col1];
input(row1, col1, m1);
int row2, col2;
scanf("%d %d", &row2, &col2);
int m2[row2][col2];
input(row2, col2, m2);
//check print
print(row1, col1, m1);
print(row2, col2, m2);
return 0;
}