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

Read from text file in Turbo C++ 3.0

本文关键字:文本 文件 读取 Turbo c++      更新时间:2023-10-16

第一篇。如果我错过了什么,或者如果你需要更多的信息,请告诉我。

好的,我在这里要做的是从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];
    }
}

如果我在播放器。txt文件中有以下文本:

ABC - 7 minutes
DEF - 4 minutes

输出如下:

ABC-7minutesDEF-4minutes

我不知道&(dataArray[i])=="n"应该是什么。在编译器错误消失之前,看起来您只是在猜测。这对任何语言都不是一个好的编码方式,更不用说c++了。

你所写的测试元素dataArray[i]是否存在于与字面值数组"n"相同的内存地址。他们当然不会,所以这个测试总是会失败。

如果你想比较一个字符,写if (dataArray[i] == 'n')。然而,这仍然是一个错误,因为dataArray[i]还没有被赋值。你应该把这行移动到之后,你读到dataArray[i]

其他问题:

  • 缓冲区溢出,将i<=size更改为i < size
  • 你无故使用new;用数组代替
  • 没有检查>>操作是否成功。
  • while(!playerData.eof())是一个错误;相反,你应该打破当>>失败

而且,Turbo c++ 3.0是在第一个c++标准之前发布的,所以在c++中使用它不是一个好主意。总之:

  • 从书中学习,而不是试错
  • 得到一个现代的编译器(有很好的免费的)

您正在比较i 字符的地址与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';
}