我无法弄清楚为什么getline在一个X-Code项目中工作而在另一个X-Code项目中没有.错误"没有匹配函数来调用'getline'.当我创建一个单独的cpp文件时,它编译没有问题.
// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () {
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我真的很感激一些帮助.我刚学习,上面的例子来自我的测试书.
代码嘈杂且不正确.正确的标准习语是这样的:
#include <fstream> // for std::ifstream
#include <string> // for std::getline and std::string
std::ifstream myfile("example.txt");
if (!myfile) { /* error, die */ }
for (std::string line; std::getline(myfile, line); )
{
std::cout << "Read one line: '" << line << "'\n";
}
Run Code Online (Sandbox Code Playgroud)
正确性:
在使用输入之前,您必须检查输入操作是否成功.否则可能是UB,当然永远不会纠正.
[感谢@James指出这一点:] good()不检查文件是否被打开.您可以使用!myfile.fail()或者myfile.is_open(),但只是不要打扰(见下文).
噪声:
该ifstream构造函数将文件名和已打开文件.用它.
该ifstream清理的析构函数,没有必要做明确.一旦完成,请使用紧密的范围来关闭文件.
line如果您不需要,请勿泄漏到环境范围内.
不需要good()(或任何正确的替代方案).只需ifstream在布尔上下文中评估对象,以查看文件是否已成功打开.
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |