使用getline从文件读取时的垃圾值

Garbage value on reading from a file using getline

本文关键字:读取 getline 文件 使用      更新时间:2023-10-16

我正在编写一个小程序,只需从一个特定格式的srt文件中获取行。然而,在使用getline进行的第一次(也是唯一一次)读取中,我得到了一个垃圾值。有人能指出我为什么会有这种不正常的行为吗?

//Small program to get the text from the srt files.
#include<iostream>
#include<string>
#include<fstream>
#include<algorithm>
#include<vector>
#include<sstream>
#include<conio.h>
using namespace std;
void srtToTranscript(ifstream* iFile, ofstream *oFile);
int main(){
std::string file_name;
std::string transcript;
cout << "Enter srt file name (without extension)";
cin >> file_name;
ifstream iFile;
ofstream oFile;
iFile.clear();
iFile.open("data\" + file_name+".srt");
oFile.open("data\" + file_name + "_result.txt");
srtToTranscript(&iFile,&oFile);
cout << "Conversion done. Check in the same folder";
cout << "Press a key to exit... ";
while (!_kbhit());
char dummy = _getch();
return 0;
}
void srtToTranscript(ifstream* iFile, ofstream* oFile)
{
        int i = 1;
        std:string line;
        for (; getline(*iFile, line);)  
        {
            cout << line << endl;
            cout << to_string(i) << endl;
            if (line.compare(to_string(i)) == 0){
                getline(*iFile, line);
                i++;
                continue;
            }
            *oFile << line + ",n";
        }
        oFile->close();
}

附件是我正在阅读的文件示例:

1

00:00:000000-->00:00:12000

翻译:Thu Huong Ha

2

00:00:12038-->00:00:15012

在过去的二十年里,印度已经成为

问题是您的ifile没有成功打开。

我在您的包含列表中看到#include <conio.h>,所以我认为您正在使用Visual Studio?如果您在设置Visual Studio时使用了默认的目录结构,那么假设您有一个名为"Foo"的项目。您的.srt文件需要转到此处:

/文档/View Studio 20##/项目/Foo/Foo/data/Foo.srt

当我正确地将文件放在那里,并在提示下输入:

Foo

我在以下文件中得到了这个输出:"…/Documents/VisionStudio20#/Projects/Foo/Foo/data/Foo_result.txt":

00:00:000000-->00:00:12000,

翻译:Thu Huong Ha,

00:00:12038-->00:00:15012,

在过去的二十年里,印度已经成为

我要确保的一件事是,您在srtToTranscript中的line声明是定义的:

string line

不是:

std:string line