2014-03-05 29 views
-1

我在初學者編程類中有一個任務,需要我乘以矩陣。該矩陣在一個文本文件定義如下:C中的簡單輸入(Shell中的輸入重定向)

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來說是全新的。謝謝!

+1

回覆:「不使用文件流」:您*有一個*重定向輸入流stdin。現在交叉'取()'列表。如果必須執行特定數據**每行**格式,則可能涉及'fgets()'。無論你使用'sscanf()','strtok()','strtol'或其中的組合是否取決於你。 – WhozCraig

回答

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); 
    } 
} 
+0

問題是我不太熟悉使用C,你能否提供一個將我的數據的第一部分輸入到二維數組的示例?謝謝您的回答。編輯:我會愉快地upvote,但需要15代表 – Aaron

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