C ++中的简单文件I / O - 永不退出此循环?

时间:2010-02-03 03:57:17

标签: c++ file-io

我是第二个OOP课程的编程学生,我的第一堂课是用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 个答案:

答案 0 :(得分:1)

我不知道你给cin的输入是什么,但请注意cin将停留在遇到的第一个空白角色。例如,如果您输入以下内容:

C:\Program Files\directory

然后aRDataLog的值为C:\Program

为了阅读整行,您可以使用getline

同时检查this post

答案 1 :(得分:1)

虽然我不确定这里的问题是什么,但最好从std::cin打印您所获得的内容,以确保获得您所期望的内容。

答案 2 :(得分:0)

你需要在else中输入actualReader.close,因为文件有打开的句柄而且它不能再打开