我正在尝试使用以下代码逐行读取文件:
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";
}
}
由于某种原因,它一直返回“输入文件错误!!!”。我已尝试完整路径和相对路径(通过使用文件的名称,因为它位于与项目相同的文件夹中)。我做错了什么?
答案 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
。)