c++编程:询问用户是否想要覆盖一个已经存在的文件
C++ Programming: Asking user if they would like to overwrite a file if it already exists
我是一名计算机科学专业的大一学生,正在为我的编程原理1课做作业。其中一小部分涉及询问用户是否想要覆盖已经存在的文件。我正在使用Code::Blocks,请记住,我只是在我的第一堂编程课。下面是我为此编写的代码:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
char outputFileName[81];
ifstream tempInputFile; // to check if file already exists
char overwrite;
ofstream outputFile;
system( "cls" );
cout << endl << endl;
cout << "Please enter the file for data to be written to: ";
cin >> outputFileName;
cout << endl << endl;
tempInputFile.open( outputFileName );
while ( tempInputFile )
{
cout << "This file already exists. Would you like to overwrite? (Y/N):";
cin >> overwrite;
cout << endl << endl;
if ( overwrite == 'Y' || overwrite == 'y' )
tempInputFile.close();
// I also tried a block if statement here with .clear() before the .close()
else
{
tempInputFile.close();
cout << "Please enter the file for data to be written to: ";
cin >> outputFileName;
cout << endl << endl;
tempInputFile.open( outputFileName );
} // end else
} // end while
tempInputFile.close();
outputFile.open( outputFileName );
cout << "The file is ready to be written to..." << endl << endl;
cout << endl << endl;
system( "pause" );
return 0;
} // end main()
问题是,如果输入一个现有文件,然后用户回答"Y"来覆盖该文件,程序将再次询问他们是否要覆盖该文件。第二次回答"Y"会继续,但我不明白为什么要问第二次。我终于写了一些代码来正确处理它(使用do…while循环),但我想知道为什么其他代码没有做我认为它应该做的事情。有人能给我解释一下吗?下面是我写的代码,它做了我想做的事情:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
int main()
{
char outputFileName[81];
ifstream tempInputFile;
char overwrite;
ofstream outputFile;
system( "cls" );
cout << endl << endl;
cout << "Please enter the file for data to be written to: ";
cin >> outputFileName;
cout << endl << endl;
tempInputFile.open( outputFileName );
if ( tempInputFile )
do
{
cout << "This file already exists. Would you like to overwrite? (Y/N):";
cin >> overwrite;
cout << endl << endl;
if ( overwrite == 'N' || overwrite == 'n' )
{
tempInputFile.close();
cout << "Please enter the file for data to be written to: ";
cin >> outputFileName;
cout << endl << endl;
tempInputFile.open( outputFileName );
if ( !tempInputFile )
overwrite = 'Y';
} // end if
} while ( overwrite == 'N' || overwrite == 'n' );
cout << "The file is ready to be written to..." << endl << endl;
tempInputFile.close();
outputFile.open( outputFileName );
cout << endl << endl;
system( "pause" );
return 0;
} // end main()
让我们专注于这部分代码:
tempInputFile.open( outputFileName );
while ( tempInputFile )
{
cout << "This file already exists. Would you like to overwrite? (Y/N):";
cin >> overwrite;
cout << endl << endl;
if ( overwrite == 'Y' || overwrite == 'y' )
tempInputFile.close();
else
{
// not important
} // end else
} // end while
当while
在open
成功后第一次被调用时,你问用户是否想覆盖文件,如果答案是Y
,你关闭文件,while
循环再次检查条件。
问题是while ( tempInputFile )
表达式检查是否有任何错误。由于关闭文件通常不会引起任何问题,所以条件是true
,您再次输入while
的主体。然后您尝试再次关闭文件,这里是它失败的地方,因为文件已经关闭。因此,当while ( tempInputFile )
第三次调用时,它以false退出。
将break
语句放在循环的第一部分。虽然你做了tempinputfile.close()
,我的猜测是,就while循环而言,它仍然是一个真值。
那么编辑成这样:
cin >> overwrite;
cout << endl << endl;
if ( overwrite == 'Y' || overwrite == 'y' )
{
tempInputFile.close();
break;
}
应该可以!break将立即退出while循环并允许重写。而不是在else
语句下面放一个break,因为在这种情况下,您希望再次执行循环。
干杯!
相关文章:
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?