从Turbo C ++ 3.0中的文本文件中读取

时间:2014-06-19 05:42:36

标签: c++ turbo-c++ borland-c++

第一篇文章。如果我遗漏了任何内容,或者您​​需要更多信息,请告诉我。

好的,我在这里尝试做的是从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

2 个答案:

答案 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';
}