C中的简单输入(Shell中的输入重定向)

时间:2014-03-05 18:37:10

标签: c arrays validation input matrix

我在初学者编程课中有一项任务,要求我乘以矩阵。矩阵在文本文件中定义如下:

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来说是全新的。谢谢!

2 个答案:

答案 0 :(得分:1)

由于您只处理数字,因此使用scanf可以正常工作。只是使用就像你只是从用户那里获取输入。当没有经验的用户一起使用getsscanf时会出现问题。

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;
}