2016-05-13 12 views
0

私の割り当てでは、テキストファイルを開き、ランダム配列を出力して質問に戻すように求められます。なぜ私のコードに出力がないのか不思議です。私が得るすべての助けに感謝します。どうもありがとうございました。出力およびランダム化文字列配列なし

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

int main() 
{ 
srand(time(0)); 
ifstream fin; 
fin.open("songs.txt"); 
if (!fin.good()) throw "I/O error"; 
string ans; 

const int MAX_SONGS = 200; 
int nSongs=0; 
string song[MAX_SONGS]; 


while (fin.good()) 
{ 
    // read txt file 
    string aSong; 
    getline(cin, aSong); 

    // add song if still have space 
    if (nSongs < MAX_SONGS) 
     song[nSongs++] = aSong; 
} 
fin.close(); 

cout<<"hi!"; 
for (int i=0; i<nSongs; i++) 
{ 
    song[i] = (rand() % nSongs); 
    cout << " play a song [Y/N]? "; 
    getline(cin, ans); 
    if (ans=="Y"||ans=="y") 
     cout << song[i]<<endl; 
    break; 
    if (ans=="n"||ans=="N") 
     break; 

    } 


    } 
+0

「hi!」と表示されますか?出力に? – sonique

+0

最終的に私はシンの代わりにフィンを作る行を変更しました! – xamfifa

答えて

0

あなたがあなたの代わりにフィンCINを使用している、ファイルを読み込むときに、あなたが代わりにキーボードからの読み込み終わります。ファイルは普通のテキストファイルは改行である場合を示すビットエラーが設定されているため

getline(cin, aSong); // getline(fin,aSong) 

は、通常は、

string aSong; 
while (fin >> aSong) 
{ 
    if (nSongs < MAX_SONGS) 
    song[nSongs++] = aSong; 
} 

while (fin.good()) 

が間違っている。このフォームは、よりコンパクトに書きますの後にgetlineを実行しますが、getlineが失敗した後でも引き続き処理します。

if (nSongs < MAX_SONGS) 
    song[nSongs++] = aSong; 

ファイルを開くと、次の構文を使用しますが、彼らを維持したい場合や方法あなたはそれを持っていた代わりに

ifstream fin("songs.txt"); 
if (fin) 
{ 
    ... 
} 

if (!fin) 
{ 
    throw "I/O error"; 
} 

EDIT:

song[i] = (rand() % nSongs); 

int j = (rand() % nSongs); 
... 
if (ans == "Y" || ans == "y") 
{ 
    cout << song[j] << endl; 

とする必要があります。ランダムな曲を表示する場合は、

+0

洞察力のあるよく書かれたコメントありがとう!私が持っていた問題はフィンでした。私がそれを変更すると、出力が表示されました。しかし、私はまだforループの問題を抱えています。 "Y"を入力したときと同じように私が何をしたか教えてください。ありがとうございました。 – xamfifa

+0

私はそれを追加しようとしましたが、私はY/yを押すと空白スペースが追加され、質問が繰り返されます。なぜあなたは配列のランダム化に関する私の宣言が正しいと思いますか? – xamfifa

+0

この行は間違った曲です[i] =(rand()%nSongs); rhsには –

関連する問題