Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        6年前关闭。
                                                                                            
                
        
我有一个while循环,在输入位置或文件名之前会引发异常。这是代码:

find.cpp

  cout << "enter file name or  location> " << flush;
  while (true)
  {
  string thefilename;
  getline( cin, thefilename );
  thefile.open( thefilename.c_str() );


  if (thefile) break;
  cout << "Invalid file. Please enter  file name or location> " << flush;

  }


  while(getline(thefile, temp))
        cout << temp << endl;
    thefile.clear();
    thefile.open("blabla.txt");


    cout << endl;
    thefile.close();
    system("pause");

    return 0;
             }


当我运行这个我得到

      enter file name or location>Invalid file. Please enter  file name or location>


代替

      enter file name or location>

最佳答案

您几乎可以肯定地忽略了有趣的代码:在输入文件名之前发生了什么!可能在它之前是一些格式化的输入(即使用std::cin >> value),例如读取数字:格式化的输入停留在与格式不匹配的第一个字符处。例如,它停止在遇到由于使用Enter键输入值而导致的换行符的情况。

要解决此问题,您可能应该摆脱领先的空格,例如,使用std::ws操纵器:

while (std::getline(std::cin >> std::ws, thefilename)) {
    ...
}


另外,您可能想在前面的输入之后ignore()直到换行符为止的所有内容:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (std::getline(std::cin, thefilename)) {
    ...
}

关于c++ - While循环错误C++ ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20460799/

10-13 08:26