【发布时间】:2015-02-19 13:39:31
【问题描述】:
程序应该打开一个路径是用户输入的文本文件。接下来,它计算文件中包含的行并输出它们。这是我尝试过的:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string path = NULL;
string garbage = NULL;
int cnt = 0;
cout << "Enter file path: ";
cin >> path;
ifstream inFile(path.c_str());
if (inFile)
{
while (!inFile.eof())
{
getline(inFile, garbage);
++cnt;
}
}
inFile.close();
cout << endl;
cout << path << " has " << cnt << " lines";
cin.ignore();
cin.get();
return 0;
}
这是我得到的:
程序:C:\Windows\SYSTEM32\MSVCP120D.dll 文件:c:\program files (x86)\microsoft visual studio 12.0\vc\include\xstring 线路:1168 表达式:无效的空指针
注意:我所学习的课程仅向我展示了 ifstream 和 ofstream 使用的方法的基础知识,例如 open、close 和 eof。所以我会很感激只有这些的解决方案,因为我相信你知道很多方法。
【问题讨论】:
-
您的代码有另一个(常见)错误:当您尝试读取某些内容但由于您处于文件末尾而无法读取时,会发生文件末尾检测。但是您在读取该行之前检查文件结尾,而不是在读取该行之后,因此您会得到错误的答案。
-
你应该使用
while (getline(inFile, garbage)) -
好的,现在我明白赫尔基在告诉我什么了。谢谢尼尔。
-
哦,最后一条评论:你应该用一个最后一个字符是换行符的输入文件和另一个最后一个字符不是换行符的输入文件来测试你的程序。 (你还必须决定在这两种情况下正确的答案应该是什么)