Простой ввод / вывод файла в C ++ - никогда не выходить из этого цикла? - PullRequest
1 голос
/ 03 февраля 2010

Я студент по программированию во втором классе ООП, мой первый класс преподавался на C #, а этот класс - на C ++. Чтобы научиться работать с C ++, наш профессор попросил нас написать довольно большую программу с File I / O. Проблема в том, что у меня есть небольшая часть моей программы, которая не работает, по крайней мере, не для меня. Проект требует, чтобы мы запрограммировали цикл для проверки возможности успешного открытия файла, и цикл, который я написал, похоже, не работает.

Я не получаю никаких ошибок компилятора, но когда я вхожу в путь к файлу, относительный или абсолютный, он говорит, что он недействителен. У меня такое ощущение, что это как-то связано с моими условиями в моей do-while петле, но я не могу точно определить это.

Я не хочу доводить свою домашнюю работу до ТА, но я почесал голову два с лишним часа, и я не могу этого понять.

Не могли бы вы помочь мне исправить мою петлю? А может объяснить, что я делаю не так? Я хочу учиться.

Спасибо!

Код:

Rainfall rData;
ifstream actualReader;
ifstream averageReader;
string aRDataLoc;
char response = 'a';
const int KILL_VALUE = 1;
double actualRainfallD;
double actualRainfallPassedArray[ARRAY_CAPACITY];
double averageRainfallPassedArray[ARRAY_CAPACITY];
int i = 0;

do
{
    actualReader.clear();
    cout << "\nPlease enter in the path to the file containing the actual rainfall  data." << endl;
    cout << "Path to file: ";
    cin >> aRDataLoc;
    actualReader.open(aRDataLoc.c_str());
      if (!actualReader.is_open())
          {
            cout << "Invalid file path! Would you like to enter in a new file path?(y/n): ";
            cin >> response;
            if (response == 'n') { exit(KILL_VALUE); }
    }
}while (!actualReader.is_open() && response == 'y');

Ответы [ 3 ]

1 голос
/ 03 февраля 2010

Я не знаю, что вы вводите в cin, но имейте в виду, что cin остановится на первом символе пробела, который встречается. Например, если вы введете в качестве ввода следующее:

C:\Program Files\directory

тогда aRDataLog будет иметь значение C:\Program.

Чтобы прочитать всю строку, вы можете использовать getline .

Проверьте также этот пост .

1 голос
/ 03 февраля 2010

Хотя я не совсем уверен, в чем проблема, возможно, будет хорошей идеей напечатать то, что вы получаете от std::cin, чтобы убедиться, что вы получаете то, что ожидаете.

0 голосов
/ 03 февраля 2010

Вы должны поместить фактический вызов ReReader.close в другое, так как файл имеет дескрипторы открытия и он не доступен для повторного открытия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...