验证函数中的文件并在主文件中调用它,输出"file is valid"它是否有效



>远未完成,但现在我正在尝试让这个程序询问文件名并将其存储在字符串中,然后转换为 ifstream,然后通过调用单独的函数来检查文件是否有效是有效的检查,如果有效,它将返回 true,如果无效,则返回 false,如果有效,主函数将输出"文件有效"。 然后它会继续重复此操作,直到进入退出。 但是它每次都返回 false,我不知道出了什么问题。 我会为任何帮助而饱满。

# include <iostream>
#include <string>
#include<fstream>
using namespace std;
bool isValid(ifstream& file)
{
    if (file.good())
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    string file_name;
    cout <<"please enter a HTML file name or hit 'exit' to quit and if you want to clear file please enter 'clear': ";
    cin >> file_name;
    ifstream my_file(file_name.c_str());

    while (file_name != "exit")
    {
        if ((isValid(my_file)) == true)
        {
            cout << "Hello" << endl;
        }
        string file_name;
        cout <<"please enter a HTML file name or hit 'exit' to quit and if you want to clear file please enter 'clear': ";
        cin >> file_name;
        ifstream my_file(file_name.c_str());
    }
}

您遇到了一个名为"阴影"的问题。

int main() {
    int i = 0;
    while (i == 0) {
        int i = 1;  // declares a new variable that
        // "shadows" (obscures) the outer i inside this scope
    }  // shadow i goes away, original i returns
}

上面的代码将永远运行,因为在 while 循环的上下文中i是在 main 中声明i

您的代码执行以下操作:

int main()
{
    // ...
    ifstream my_file(file_name.c_str());
    while (file_name != "exit")
    {
        if ((isValid(my_file)) == true)  // << outer my_file
        // ...
        ifstream my_file(file_name.c_str()); // << scope-local variable
    }  // << scope local my_file goes away
}

您可能需要考虑重构代码以避免重复并简化它:

#include <iostream>
#include <fstream>
#include <string>
int main() {
    for (;;) {  // infinite loop
        std::string file_name;
        std::cout <<"please enter a HTML file name or hit 'exit' to quit and if you want to clear file please enter 'clear': " << std::flush;
        if (!std::getline(std::cin, file_name))
            break;
        if (file_name == "exit")
            break;
        std::ifstream my_file(file_name);
        if (!my_file.is_open()) {
            std::cerr << "unable to open file " << file_name << 'n';
            continue;
        }
        std::cout << "hellon";
    }
}

我把它留给你重新引入你的isValid函数的练习。

相关内容

  • 没有找到相关文章

最新更新