2016-05-13 39 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

你能看到“嗨!”吗?在输出? – sonique

+0

它终于做到了,当我改变得到线而不是cin! – xamfifa

回答

0

当你在文件中读取,使用的是CIN的,而不是鳍所以你最终从键盘读来代替。

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

一般来说,如果该文件只是一个普通的文本文件换行符你写的更加紧凑

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

这种形式

while (fin.good()) 

是错误的,因为该位指示错误设置你确实getl​​ine,但getline失败后仍然继续。

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

当您打开该文件,请使用以下语法而不是

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

,或者如果你想保持他们的方式,你有它

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

编辑:

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); –