2012-02-21 14 views
0

2つの配列を乗算するための入力データとしてdados.txtというファイルを使用するにはどうすればよいですか?ある は、私がCINを使用したいが、ファイルには、以下のデータが含まれていdados.txtC++で外部ファイルを入力として使用

#include <iostream> 
#include <fstream> 
#define MAX 100 
using namespace std; 
int main() 
{ 
    int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX]; 
    int m, n, p, i, j, k, aux; 
    ifstream arquivo; 
    arquivo.open("dados.txt"); 
    while (arquivo >> aux) 
    { 
     //cin >> m >> n >> p; 
    //read dados.txt 
     for (i = 0; i < m; i++) 
      for (j = 0; j < n; j++) 
       cin >> A[i][j]; 
     for (i = 0; i < n; i++) 
      for (j = 0; j < p; j++) 
       cin >> B[i][j]; 
     for (i = 0; i < m; i++) 
      for (j = 0; j < p; j++) 
      { 
       C[i][j] = 0; 
       for (k = 0; k < n; k++) 
        C[i][j] += A[i][k] * B[k][j]; 
      } 
     for (i = 0; i < m; i++) 
     { 
      for (j = 0; j < p; j++) 
       cout << C[i][j] << " "; 
      cout << endl; 
     } 
    } 
    arquivo.close(); 
    return 0; 
} 

dados.txtデータファイル(例)読んでいない:あなたがしている

3 5 4 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

答えて

1

あなたはすでにあなたが宣言したfilestream、arquivoを通してファイルから読み込んでいます。 cin >> A [i] [j]を実行するのではなく、あなたは単にarquivo >> A [i] [j]を実行します。しかし、あなたはまた、while状態からarquivo >> auxを取り出す必要があります。あなたがそれをセットアップした方法では、ループがどれくらい長く続くかを知っているようです。実際にはwhileループは必要ありません。コードのその部分は、次のようになります。

arquivo.open("dados.txt"); 
for (i = 0; i < m; i++) 
    for (j = 0; j < n; j++) 
     arquivo >> A[i][j]; 
for (i = 0; i < n; i++) 
    for (j = 0; j < p; j++) 
     arquivo >> B[i][j]; 
for (i = 0; i < m; i++) 
    for (j = 0; j < p; j++) 
    { 
     C[i][j] = 0; 
     for (k = 0; k < n; k++) 
      C[i][j] += A[i][k] * B[k][j]; 
    } 
for (i = 0; i < m; i++) 
{ 
    for (j = 0; j < p; j++) 
     cout << C[i][j] << " "; 
    cout << endl; 
} 
arquivo.close(); 
+0

サーミールありがとうございます。 –

0

コード内のcinarquivoに置き換えてください(ロジックがOKの場合)。

と同様に、このオブジェクトに害を与えないだろうより多くの従来の名前を(のようなfinまたはfilein)与える

arquivo >> m >> n >> p; 

。あなたはまったく同じように使用することができますので、あなたのifstream arquivo

0

は、std::cinと同様のクラスで実際にある: `arquivo >> M >> N >> P;」を

私はauxを理解していませんあなたはこのような何かを行うことができ、可変しかし、あなたがそれをやりたい

0

クリスのリンクは上に見て正しいものである :?。

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
     while (myfile.good()) 
     { 
     getline (myfile,line); 
     cout << line << endl; 
     //maybe a function-call with the string line to extract the values you need 
     } 
     myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 
(cplusplus.comサイト上の例をチェックアウト)
0

このようなテキストファイルから数値を読み取ることができます。

オープンファイルストリーム

ifstream DataFile; 
DataFile.open (fileLocation.c_str(), ios::in); //assume fileLocation is a string type 

読むと入力

string input;  
getline(DataFile, input); 

の行を格納し、あなたは、このような文字列を操作するものなど様々な方法を(使用している文字列から数値を抽出することができ、 cstringをint/floatに変換します)。それは、テキストファイルがどのように見えるかについてどれだけ知っているかによって異なります。