C+中的简单文件I/O+;-从不退出这个循环? 我是第二个OOP班的一个编程学生,我的第一堂课是在C语言中教的,这个课程是用C++来教的。为了让我们的脚在C++中被润湿,我们的教授要求我们用文件I/O写一个相当大的程序。问题是,我的程序中有一小部分不起作用,至少对我来说不是这样。该项目要求我们编写一个循环来测试文件是否可以成功打开,而我编写的循环似乎不起作用

C+中的简单文件I/O+;-从不退出这个循环? 我是第二个OOP班的一个编程学生,我的第一堂课是在C语言中教的,这个课程是用C++来教的。为了让我们的脚在C++中被润湿,我们的教授要求我们用文件I/O写一个相当大的程序。问题是,我的程序中有一小部分不起作用,至少对我来说不是这样。该项目要求我们编写一个循环来测试文件是否可以成功打开,而我编写的循环似乎不起作用,c++,file-io,C++,File Io,我没有得到任何编译器错误,但当我输入文件的路径时,无论是相对路径还是绝对路径,它都表示该路径无效。我有一种感觉,这与我的do while循环中的条件有关,但我无法准确指出 我本不想把作业带到这样的地步,但我已经挠头两个多小时了,我似乎不明白这一点 你介意帮我修一下线圈吗?也许能解释一下我做错了什么?我想学习 谢谢 代码: Rainfall rData; ifstream actualReader; ifstream averageReader; string aRDataLoc; char re

我没有得到任何编译器错误,但当我输入文件的路径时,无论是相对路径还是绝对路径,它都表示该路径无效。我有一种感觉,这与我的
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');
rData;
ifstream-actualReader;
ifstream AveragerReader;
字符串aRDataLoc;
字符响应='a';
常数int KILL_值=1;
双实际降雨量;
双实际RAINFALLPASSEDARRAY[阵列容量];
双平均FallPasseArray[阵列容量];
int i=0;
做
{
actualReader.clear();
cout反应;
if(response='n'){exit(KILL_VALUE);}
}
}而(!actualReader.is_open()&&response='y');

您需要将actualReader.close调用放入else,因为该文件有打开的句柄,无法再次打开

我不知道您给
cin
的输入是什么,但请注意
cin
将在遇到第一个空格字符时停止。例如,如果您提供以下内容作为输入:

C:\Program Files\directory
然后,
aRDataLog
将具有值
C:\Program

为了阅读整行文字,你可以使用


也请检查。

虽然我不确定问题出在哪里,但最好打印您从
std::cin
获得的内容,以确保您得到了预期的结果。

如果我们看不到声明的变量,就帮不上忙了。这对我来说很好。如果输入一个不存在的文件名,它会提示是否继续。如果输入现有文件名,它将退出。这不是你想要的吗?你能告诉我们到底是哪条线路出了故障吗?还是文件永远都不会打开?另外,您应该向ifstream.open()传递一个模式。。。。例如:actualReader.open(aRDataLoc.c_str(),ifstream::in)。此外,请确保在程序中达到该点时,aRDataLoc是您所期望的状态。此外,请确保在处理完文件后关闭该文件…文件名是否包含空格?您是否也键入了文件扩展名?+1。还值得注意的是,
std::cin
不知道或不尊重用“s”分隔路径的常规方法。谢谢!cin在我的
visual studio 2008
目录的空白处停了下来。非常感谢!