使用C ++逐行读取文件

时间:2011-12-09 14:49:27

标签: 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";
    }

}

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

4 个答案:

答案 0 :(得分:5)

你没有逃脱字符串。尝试改变:

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

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

答案 1 :(得分:2)

菲利斯说'''是逃避。因此你需要两个。

或者您可以使用'/'字符 因为Windows已经将此作为目录分隔符接受了十年或更长时间。

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

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

答案 2 :(得分:1)

首先,如果你想在一个字符串中说'\',你应该把'\\',这就是路径问题。

然后,字符串buf没有连接到您的文件..

答案 3 :(得分:0)

C字符串中的反斜杠用于转义序列(例如\n是换行符,\r回车符,\t是表格,...),因此你的字符串越来越多因为对于每个反斜杠+字符序列,编译器正在替换相应的转义序列。要在C字符串中输入反斜杠,您必须使用\\

来转义它们
getGrades("C:\\Users\\TOUCHMATE\\Documents\\VS projects\\GradeSystem\\input.txt");

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