getfile()在第一次尝试时失败,但在第二次尝试时仍在工作,我该如何修复此问题

getfile() is failing on 1st try but working on second, how can i fix this?

本文关键字:何修复 问题 工作 失败 getfile 第二次 第一次      更新时间:2023-10-16

我正在尝试从用户那里获取文件位置。我已经在几十个程序上使用了相同的getfile函数,没有任何问题。由于一些奇怪的原因,这个总是在第一次尝试时返回一个无法打开的文件,但在第二次尝试时接受它。我在getline之前尝试过cin.clear();,在那里我可以获得文件位置,但这没有帮助。我不明白为什么这行为如此怪异。这是我的getfile函数:

void maze::getfile()
{
    string filename;
    char X;

    cout << "please enter the location of the file you wish to input: " << endl;
    getline(cin, filename);
    cin.ignore(100, 'n');
    inData.open(filename.c_str()); //opens file
    while (!inData) //while the file is accesible
    {
        cout << "The file could not be opened.nPlease try again: " << endl;
        //error message for input validation
        getline(cin, filename);
        cin.ignore(100, 'n');
        inData.open(filename.c_str());
    }

    for(int i = 1; i < 11; i++)
    {
        for(int u = 1; u < 11; u++)
        {
            inData >> X >>ws;
            if(X == '1')
                X = 219;
            if(X == '0')
                X = ' ';
            floor[i][u] = X;
        }
    }
    floor[0][0] = 201;
    floor[0][11] = 187;
    floor[11][0] = 200;
    floor[11][11] = 188;
    for(int i=1; i < 11; i++)
    {
        floor[0][i] = 205;
        floor[11][i] = 205;
        floor[i][0] = 186;
        floor[i][11] = 186;
    }
    inData.close();
}

在此之前唯一发生的事情就是主菜单调用。我将变量choice =设置为主菜单函数,该函数返回一个字符,在本例中为"1"。你知道为什么它在第一次输入文件时失败,而不是在第二次尝试相同的文件时失败吗?

我敢肯定,在第一次调用std::getline之前,您在流中留下了一条换行符(可能还有scanf()cin>>gets()),这样它就会为filename提供一个空字符串,之后,换行符就会被吃掉,所以第二次它运行良好。