我是一名新生計算機科學專業,負責編寫我的編程原理1課程。它的一小部分涉及詢問用戶是否想覆蓋文件,如果它已經存在。我正在使用Code :: Blocks,請記住,我只在我的第一個編程類。下面是我寫的這個代碼:C++編程:詢問用戶是否想覆蓋文件,如果它已經存在
#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()
是的,我現在明白了。非常感謝你! – dsfsu