繁体   English   中英

使用C ++逐行读取文件

[英]Read File line by line using C++

我正在尝试使用以下代码逐行读取文件:

void main()
{
    cout << "b";
    getGrades("C:\Users\TOUCHMATE\Documents\VS projects\GradeSystem\input.txt");
}

void getGrades(string file){

    string buf;
    string line;
    ifstream in(file);

    if (in.fail())
    {
        cout << "Input file error !!!\n";
        return;
    }

    while(getline(in, line))
    {
        cout << "read : " << buf << "\n";
    }

}

由于某种原因,它不断返回“输入文件错误!!!”。 我尝试使用完整路径和相对路径(通过仅使用文件名作为其位于与项目相同的文件夹中)。 我究竟做错了什么?

您没有转义字符串。 尝试更改:

getGrades("C:\\Users\\TOUCHMATE\\Documents\\VS projects\\GradeSystem\\input.txt");

否则所有\\东西都会被误解。

正如Felice所说,“ \\”是一个转义符。 因此,您需要两个。

或者,您可以使用'/'字符。
Windows已经接受它作为目录分隔符已有十多年了。

getGrades("C:/Users/TOUCHMATE/Documents/VS projects/GradeSystem/input.txt");

这样做的好处是看起来更整洁。

首先,如果要在字符串中说“ \\”,则应输入“ \\\\”,这就是路径问题。

然后,字符串buf不在连接到您的文件中。

C字符串中的反斜杠用于转义序列(例如, \\n是换行符, \\r回车, \\t是制表符,...),因此您的字符串变得乱码,因为对于每个反斜杠+字符序列,编译器都将替换相应的转义序列。 要在C字符串中输入反斜杠,必须使用\\\\对其进行转义:

getGrades("C:\\Users\\TOUCHMATE\\Documents\\VS projects\\GradeSystem\\input.txt");

顺便说一句,它是int main ,而不是void main ,并且您应该返回退出代码(如果一切正常,通常为0 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM