而循环错误c ++

时间:2013-12-08 23:51:12

标签: c++ loops visual-c++ while-loop

我有一个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>

1 个答案:

答案 0 :(得分:5)

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

要解决这个问题,你应该摆脱领先的空白,例如,使用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)) {
    ...
}