2017-10-03 14 views
1

私はこの問題に関してあなたの助けをすることができました。私はこれを含むファイルを持っています:getlineを使ってファイルから配列を読み込む方法

1x+1y+1z=5 
2x+3y+5z=8 
4x+0y+5z=2 

私はそれを文字列に保存する必要があります。格納されると、出力は次のようになります。

1x+1y+1z=5 
a=1 b=1 c=1 d=5 
2x+3y+5z=8 
a=2 b=3 c=5 d=8 
4x+0y+5z=2 
a=4 b=0 c=5 d=2 

これは私が持っているコードですが、何も出力されません。誰か助けてくれますか? 19行目にエラーが表示されますが、それを修正する方法はわかりません。エラーは、「呼び出しに一致する機能がありません」と表示されます。

|19|error: no matching function for call to 'std::basic_ifstream::getline(std::string [10], int)'| |22|error: no matching function for call to 'std::basic_istringstream::basic_istringstream(std::string [10])'|

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    ifstream file("matrix.txt"); 

    if (!file) 
    { 
     cout << "Could not open input file\n"; 
     return 1; 
    } 


    for (string line[10]; file.getline(line, 10);) 
    { 
     cout << line << '\n'; 
     istringstream ss(line); 

     double a, b, c, d; 
     char x, y, z, eq; 

     if (ss >> a >> x >> b >> y >> c >> z >> eq >> d) 
     { 
      if (x == 'x' && y == 'y' && z == 'z' && eq == '=') 
      { 
       cout << "a = " << a 
        << " b = " << b 
        << " c = " << c 
        << " d = " << d << '\n'; 
      } 
      else 
      { 
       cout << "parse error 2\n"; 
      } 
     } 
     else 
     { 
      cout << "parse error 1\n"; 
     } 

    } 

} 
+2

「なぜ、このコードの動作はしません」 – Tyler

+0

を実行している/コンパイルするときあなたが得るすべてのエラーを提供してください尋ねるたびに[ 'std名前空間を使用して;'悪い習慣です]( https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)、絶対に使用しないでください。 – tambre

+0

'for(string line [10]; file.getline(line、10);)'この行は、私にとって非常に疑わしいです。 – Borgleader

答えて

0

ミスがいくつかあります。

間違い番号。 1

string line[10]を宣言することはできません。 forループを使用しないでください。ここでは、ストリームから文字列で文字列を読み込むの古典的な実装です:

string line; 
while (file >> line) { 
    ... // do stuff 
} 

間違いはありません。 2

あなたが使用する必要がありますので、あなたの番号は、int型ではなく、ダブルス、次のとおりです。配列に保存する値のすべての

まず、何も良いがないことを、私は言わせ

int a, b, c, d; 

生の配列を使用する理由。標準のADT(std :: vectorなど)を使用する方がよいでしょう。

このシナリオでは、値が不正な形になる可能性があるため、値をベクトルに正しく読み込まないでください。

代わりにこのシーケンスに従ってください:

vector<string> lines; 
string line; 
while (file >> line) { 
    ... // do stuff 

    if (successful) 
    lines.push_back(line); 
} 
+0

しかし、私は配列に行を保存したい。 – compscistudent

+0

@compscistudent、ベクトルに行を追加する答えを更新しました –

+0

私はまだベクトルを使うことができませんし、ポインタを使って数値を操作するために配列に格納する必要があります – compscistudent

関連する問題