我在C ++中有一项工作要做,它假设读取文件.txt并使用里面的信息。但是我们的老师给了我们代码的开头来帮助我,我真的不明白。我是c ++的初学者,所以我一直在寻找它好几个小时,但我找不到答案,谢谢!
这是一段代码:
int main(int argc, const char** argv)
{
std::ifstream* myfile = NULL;
if (argc == 2) {
file = myfile = new std::ifstream(argv[1]);
if (myfile->fail())
std::cerr << "Error at the opening of the file'" << argv[1] << "'" << std::endl;
}
else
std::cerr << "No file name." << std::endl;
while (*file) {
std::string event;
*file >> event;
if (!(*file)) break;
if (event == "recipe") {
std::string namerecipe;
*file >> recipe;
...
我不明白吗?什么是*档案?和文件?它是文件上的指针吗?为什么没有像get line这样的函数呢?为什么“while * file”应该这样做? 非常感谢你 !
答案 0 :(得分:1)
int main(int argc, const char** argv)
{
典型的功能入口点。
std::ifstream* myfile = NULL;
if (argc == 2) {
确保有足够的参数从argv[1]
获取文件名。
file = myfile = new std::ifstream(argv[1]);
动态分配文件输入流并尝试使用它来打开argv[1]
中指定的文件。然后将此文件流分配给两个指针file
和myfile
。我承认没有注意到有两个指针,但我也没有看到指针的位置。
if (myfile->fail())
调用流的fail
功能。这将测试流是否有任何问题。此时,所有要测试的是流是否打开。
std::cerr << "Error at the opening of the file'" << argv[1] << "'" << std::endl;
}
else
std::cerr << "No file name." << std::endl;
while (*file) {
取消引用file
指针以对文件对象进行操作。这将调用流的布尔运算符。它具有相同的(C ++ 11或更新近期)或类似的情况,在这种情况下(在C ++ 11之前)无关紧要,因为调用!file->fail()
。有关运算符bool的更多信息,请访问:http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool
std::string event;
*file >> event;
从流中读取一个以空格分隔的标记,一个单词。
if (!(*file)) break;
操作员再次布尔。失败时退出循环。
if (event == "recipe") {
std::string namerecipe;
*file >> recipe;
从流中读取另一个单词。
代码可以按以下方式重写:
int main(int argc, const char** argv)
{
if (argc == 2)
{
std::ifstream myfile(argv[1]);
if (myfile)
{
std::string event;
while (myfile >> event)
{
//this function is getting deep. Consider spinning this off into a new function
if (event == "recipe")
{
std::string namerecipe;
if (myfile >> recipe)
{
// do stuff that is missing from code sample
}
else
{
// handle error
}
}
}
}
else
{
std::cerr << "Error at the opening of the file'" << argv[1] << "'" << std::endl;
}
}
else
{
std::cerr << "No file name." << std::endl;
}
}
答案 1 :(得分:0)
*file
是指向输入文件流ifstream
对象的指针。 file
是您的输入文件流ifstream
对象。
while(*file)
正在使用流的布尔运算符来测试输入文件流中的错误情况(在读取文件时没有错误)