【问题标题】:getfile() is failing on 1st try but working on second, how can i fix this?getfile() 第一次尝试失败,但第二次尝试,我该如何解决这个问题?
【发布时间】:2014-04-17 23:59:41
【问题描述】:

我正在尝试从用户那里获取文件位置。我在几十个程序上使用了相同的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”。任何想法为什么它在第一次文件输入时失败,而不是在第二次尝试相同的文件?

【问题讨论】:

  • 一旦第二次输入文件并打印迷宫,一切看起来都很完美。所以程序确实可以工作,只是没有我想要的那么干净
  • X = 219; 这将溢出(未定义的行为),除非您的平台的 charunsigned
  • X = 219 似乎正在工作,它将字符设置为我用来制作墙字符的实心块。第一次输入文件时,我得到“无法打开文件”,这意味着文件位置或打开文件有问题。但是我再次拖放同一个文件,一切都很好。它对我没有任何意义。
  • "X = 219 似乎在工作" 这是未定义行为的一个有效结果,另一个是 Bjarne 敲响你的门铃,当你开门时吸盘打你,你很幸运是前者.至于您的文件问题,听起来问题可能出在其他地方。
  • 大声笑好的,我会不签名的。谢谢你的建议。

标签: c++ getline


【解决方案1】:

我确定您在第一次调用 std::getline 之前在流中留下了换行符(可能是 scanf()cin&gt;&gt;gets()),这样它就会为您提供一个空字符串作为 @ 987654325@,之后换行被吃掉,所以第二次运行正常。

【讨论】:

    猜你喜欢
    • 2022-08-15
    • 1970-01-01
    • 2014-05-27
    • 2020-08-31
    • 1970-01-01
    • 2013-12-07
    • 2012-05-25
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多