2014-04-17 80 views
0

我想从用户那里得到一个文件位置。我在几十个没有问题的程序上使用了相同的getfile函数。由于一些奇怪的原因,这一次总是在第一次尝试中返回一个无法打开的文件,但在第二次尝试后再接受它。我在getline之前尝试过cin.clear();,我在那里获取文件位置,但这没有任何帮助。我无法弄清楚为什么这表现太奇怪了。这里是我的getfile功能: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'。任何想法,为什么它在第一个文件输入失败,而不是第二次尝试使用相同的文件?

+0

第二次输入文件并打印迷宫一切看起来很完美。所以程序确实有效,只是不像我想要的那样干净利落 – user2087867

+0

'X = 219;'这会溢出(未定义的行为),除非你的平台的'char'是'unsigned'。 – user657267

+0

X = 219似乎在工作,它将字符设置为一个固体块,我用它来制作墙角色。第一次输入文件我得到“文件无法打开”,这意味着文件位置或打开文件有问题。但是我再次拖放同一个文件,一切都很好。它对我没有任何意义。 – user2087867

回答

0

我敢肯定,你叫std::getline第一次使用前,你留下一个换行符(也许scanf()cin>>gets()左)在流,所以,它给你的filename一个空字符串,在那之后,换行是吃,所以它第二次正常工作。

相关问题