【发布时间】:2017-04-18 17:37:15
【问题描述】:
这是一个家庭作业,但我展示的是一个小型测试程序,用于我的大部分作业。
一开始,我将在文件“songs.txt”中有一个歌曲列表。我当前的文件是这样的。
Maneater;4;32
Whip It;2;41
Wake Me Up Before You Go-Go;3;45
该文件仅包含歌曲标题以及以分钟和秒为单位的持续时间,标题、分钟和秒以分号分隔。完整的文件也应该包含艺术家和专辑,都用分号分隔。无论如何,代码。
#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdlib>
using namespace std;
const int CAP = 100;
const int MAXCHAR = 101;
struct songInfo
{
char title[CAP];
char durMin[CAP];
char durSec[CAP];
};
void getData(songInfo Song[], int listSize, int charSize);
int main()
{
string fileName;
songInfo Song[CAP];
ifstream inFile;
cout << "What is the file location?: ";
cin >> fileName;
inFile.open(fileName.c_str());
if (inFile.fail())
{
cout << "Cannot open file " << fileName << endl;
exit(1);
}
getData(Song, CAP, MAXCHAR);
for (int i=0;i<CAP;i++)
{
cout << Song[i].title << " - "
<< Song[i].durMin << ":"
<< Song[i].durSec << endl;
}
cout << "Press any button to continue..." << endl;
cin.get(); cin.get();
return 0;
}
void getData(songInfo Song[], int listSize, int charSize)
{
for (int i = 0; i < listSize; i++)
{
cin.get(Song[i].title, charSize, ';');
cin.get(Song[i].durMin, charSize, ';');
cin.get(Song[i].durSec, charSize, '\n');
i++;
cin.ignore();
}
}
程序可以正常编译,但输出不是我想要的。应该发生什么:
Test.cpp 打开songs.txt
将第一个char数组读入Song[i].title,用';'分隔
将第二个字符读入Song[i].durMin,用';'分隔
将第三个字符读入 Song[i].durSec,由换行符分隔
编译并运行代码后,我得到这个作为我的输出:
~/project2Test> ./test
What is the file location?: songs.txt
然后程序在这里挂起,我必须 ctrl+C 退出
首先,我做错了什么? 其次,我该如何解决我搞砸的问题?
另外,作为类规则的注释,我不允许使用除文件名之外的任何字符串。除此之外,所有单词都必须是字符。
【问题讨论】:
-
这应该可以帮助您顺利上路:stackoverflow.com/questions/1120140/…
-
"all words must be chars" 你的意思是
chararrays 对吧? -
“我不允许使用除文件名之外的任何字符串” 我真的不知道教你的目的是什么 ;(
-
-
您正在阅读来自
cin,而您应该阅读来自inFile。因此,您的代码正在等待来自控制台的输入。使用inFile.get或inFile.getLine()