我的作业要求我打开一个文本文件并输出一个随机数组并将其循环回问题。我想知道为什么我的代码没有输出?我感谢所有帮助。非常感谢你。
#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 :(得分:0)
当你在文件中读到时,你正在使用 cin 而不是 fin ,所以你最终会从键盘上读取。
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";
}
修改强>
song[i] = (rand() % nSongs);
应该是
int j = (rand() % nSongs);
...
if (ans == "Y" || ans == "y")
{
cout << song[j] << endl;
如果你想要播放随机歌曲。