第一篇文章。如果我遗漏了任何内容,或者您需要更多信息,请告诉我。
好的,我在这里尝试做的是从Turbo C ++ 3.0中的文本文件中读取数据,然后输出此文本。
这是我的代码(已更新):
ifstream playerData("players.txt");
const int size = 100;
char* dataArray = new char[size];
while(!playerData.eof()){
for(int i=0; i<size; i++){
playerData>>dataArray[i];
if(dataArray[i]=='\n'){
cout<<"\n";
}
cout<<dataArray[i];
}
}
如果我在players.txt文件中有以下文字:
ABC - 7 minutes
DEF - 4 minutes
然后这是输出的内容:
ABC-7minutesDEF-4minutes
答案 0 :(得分:4)
我不知道&(dataArray[i])=="\n"
应该是什么。在编译器错误消失之前,您似乎只是想到了一些事情。这不是编写任何语言的好方法,更不用说C ++了。
您编写的内容测试元素dataArray[i]
是否与文字数组"\n"
位于同一内存地址。他们肯定没有,所以这个测试总会失败。
如果您打算与char进行比较,请写下if (dataArray[i] == '\n')
。但是,这仍然是一个错误,因为尚未为dataArray[i]
分配值。您应该在读到dataArray[i]
后将行移至。
其他问题:
i<=size
更改为i < size
new
;改为使用数组>>
操作是否成功。while(!playerData.eof())
是一个大错;相反,你应该在>>
失败时中断此外,Turbo C ++ 3.0在第一个C ++标准之前出现,因此将它用于C ++并不是一个好主意。总结:
答案 1 :(得分:1)
您正在将i
th 字符的地址与const literal "\n"
的地址进行比较,这是无用的。要将字符与字符\n
进行比较,您应该使用单引号:'\n'
并删除&
运算符。
if (dataArray[i]=='\n')
忘记Turbo C ++并使用新的和现代的编译器
更新后
您应该尝试使用STL和托管容器,而不是指针和new/delete
。而且,.eof()
的测试不是一个好习惯,使用对象本身。要获得一行,您可以使用std::getline
函数。在标准的新编译器中重写代码:
ifstream playerData("players.txt");
while(playerData) {
string dataArray;
getline(playerData, dataArray);
cout << dataArray << '\n';
}