2017-11-30 12 views
0

2つのテキストファイルがあります。キーワードを使用してテキストファイルから番号を返します。

ファイル1つの内容: アップル5 マンゴー10 オレンジ15

ファイル2つの内容: アップル10 マンゴー15 オレンジ20

I両方のファイルの内容は、次のようになりキーワード(ここではフルーツの名前)を取ってランダムにファイルの1つを選択し、そのキーワードに対応する数値を返すプログラムを作ろうとしています。以下は私のコードです。しかし、このプログラムを実行すると、最初の値のみが表示され、対応する値は表示されません。私は間違って何をしていますか?あなたが要求した値に到達するまで、あなたは順次ファイルを読み込む必要があり、および:

while (inResultFile >> sym >> value) 
    { 
     return value; 
    } 

注:

double Fruit::Price(string & sym) 
    { 
     ifstream inResultFile; 
     string file_selected; 
     int choice; 
     string line; 

     /*choice = (rand()%2); 

     switch (choice) 
     { 
     case 0: 
      file_selected = "file 1.txt"; 
      break; 

     case 1: 
      file_selected = "file 2.txt"; 
      break; 
     }*/ 

     inResultFile.open("file 1.txt", ios::in); 
     if (inResultFile.is_open()) 
     { 
      double value=-1; 
string name; 

      while (inResultFile >> name >> value) 
      { 
cout<<name<<value; 
if(name==sym) 
       return value; 
      } 

     } 
     else 
      cout << "Sorry, the file could not be openend." << endl; 
return -1; 
    } 

    int main() 
    { 
     Fruit Obj; 
     string symbol; 
     double f_Price; 

     cout << "Enter a keyword to get the fruit price" << endl << endl; 
     cin >> symbol; 

     f_Price = Obj.Price(symbol); 
     cout << "The selected price of the input symbol is " << f_Price << endl; 
     return 0; 
    } 
+1

ですあなたのデバッガでは、 'value'の価値はあなたに何を伝えましたか? – UKMonkey

+0

私がマンゴーに入ったときに得られる価値は5、すなわちリンゴの価値です。別のキーワードを試しても同じことが起こります。 –

+1

これはデバッガではないので、プログラムを実行して使用しようとしています。これを読んでください。 https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – UKMonkey

答えて

0

1)あなたは、次の行でsym(要求された果物)の値を破壊しますその後、あなたはそれを返すことができます。

2)あなたは、あなたがしなければならない正しい値を取得するために(また、それは上記の行で発生しなければなりません!)!ただ試す最初のを返す、ファイルから取得した値が要求された果物やない

+0

私はあなたの言葉通りに変更を加えました。一方、(inResultFile >>名>>値) \t \t { \t \t \t場合(名前== SYM) \t \t \t戻り値; \t \t}。ただし、出力は-nan(ind)になります。 –

+0

@RestingPlatypusおそらく、文字列を 'value'として読み込みます。二重の値ではないので、 'value'は' nan'になります。 'cout'を使って、どのプログラムを読み込むかをデバッグしてください。 –

+0

@RestingPlatypus '-1'を返す場合は、ファイルの内容を確認してください。 –

0

を確認したことがありません以下のような果実の比較を行います -

string fruit = null; 
    while(inResultFile >> fruit >> value) 
    { 
    if(fruit == sym) 
     return value; 
    } 

をあなたの方法の終わりには、戻り値が0であれば、単に果物ヨーヨーを意味していることを確認してください下の行の主で

else 
    cout << "Sorry, the file could not be openend." << endl; 
    return 0;//no fruit found 

を使用します選択したファイルは使用できません。

私のために働いている以下のコードを使用しています。ちょうどあなたのtxt入力ファイルをチェックしてください。データエラーでなければなりません

class Fruit 
{ 
    public: 
    double Price(string & sym); 
}; 

double Fruit::Price(string & sym) 
{ 
    ifstream inResultFile; 
    string file_selected; 
    int choice; 
    string line; 

    /*choice = (rand()%2); 

    switch (choice) 
    { 
    case 0: 
     file_selected = "file 1.txt"; 
     break; 

    case 1: 
     file_selected = "file 2.txt"; 
     break; 
    }*/ 

    inResultFile.open("file1.txt", ios::in); 
    if (inResultFile.is_open()) 
    { 
     double value=-1; 
     string name; 
     while (inResultFile >> name >> value) 
     { 
      cout<<name<<value<<endl; 
      if(name==sym) 
       return value; 
     } 

    } 
    else 
     cout << "Sorry, the file could not be openend." << endl; 
     return -1; 
} 

int main() 
{ 
    Fruit Obj; 
    string symbol; 
    double f_Price; 

    cout << "Enter a keyword to get the fruit price" << endl << endl; 
    cin >> symbol; 

    f_Price = Obj.Price(symbol); 
    cout << "The selected price of the input symbol is " << f_Price << endl; 
    return 0; 
} 

そして、私の出力

マンゴー
Apple5
Mango10
あなたはブレークポイントを置いたときに入力シンボルの選択された価格は、だから、10

+0

私はこれをしました。しかし、それは私にこの奇妙な出力を与える - nan(ind)。 –

+0

@RestingPlatypusファイルから読み込んだものをデバッグするだけです。読み込んだ内容を確認するには、 'cout << fruit << value << endl;'を追加してください。関数が返す値は何であるかも表示します。 –

+0

@RestingPlatypus、私はコードを変更しました。チェックしてください。またBonje Firの助言に従ってください。 –

関連する問題