C ++ последующие файлы не открываются после первого файла - PullRequest
0 голосов
/ 21 марта 2012

После того, как программа прочитает файл, получит символы из файла и завершит работу, пользователя спросят, хотят ли они прочитать другой файл или нет.Если пользователь говорит «да», программа запрашивает имя файла, но затем автоматически говорит, что файл не может быть открыт, и выходит из цикла.Пожалуйста, помогите мне.

Вот код:

do //do while opening the source file fails
      {
         cout << "Enter filename of source file: ";
         cin.getline (filename,51);
         sourceFile.open(filename);  //opens the file with given filename
         if (sourceFile.fail())
            cout << "File could not be opened" << endl;  //error if can't open
         sourceFile.clear();
      } 
      while (sourceFile.fail());  //exits if source file doesn't fail

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Этот тест:

while (sourceFile.fail())

никогда не будет правдой, потому что перед тем, как попасть туда, вы звоните:

sourceFile.clear()

, который удалит все проблемные биты в iostate для потока.

Я думаю, вы просто хотите избавиться от звонка на clear().

0 голосов
/ 27 апреля 2012

Канонический способ проверить, не удалось ли открыть файл, - использовать std::basic_ios::operator !():

do
{
    cout << "Enter filename of source file: ";
    std::getline(std::cin, filename);
    sourceFile.open(filename.c_str());
    if (!sourceFile)
    {
        cout << "File could not be opened" << endl;
    }
}
while (!sourceFile);
...