while (in != "XXXX") {
cout << "What do you want to name the file? Enter a name or enter XXXX to quit.\n";
...
}
Если вы введете XXXX
, цикл не будет завершен. Он попытается обработать остальную часть кода.
char fileName = ' ';
объявляет один символ. Вы хотите массив символов. Еще лучше, объявите это как std::string fileName;
remove(fileName + ".txt");
не скомпилируется, потому что remove
- это функция C. C не поддерживает классы и не знает, что делать с такими классами, как std::string
. Вы хотите предоставить C-строку, вы можете сделать это с помощью fileName.c_str()
Ниже приведены несколько предложений:
int main()
{
ofstream outFile;
string fileName;
string text;
for(;;)
{
cout << "What do you want to name the file?\n";
cout << "Enter a name or enter 999 to quit.\n";
cin >> fileName;
if(fileName == "999")
break;
fileName += ".txt";
outFile.open(fileName);
if(outFile.fail())
{
cout << "Can't do it.";
continue;
}
else
{
for(;;)
{
cout << "What do you want in it?\n";
cout << "Enter a name or enter 999 to stop.\n";
cin >> text;
if(text == "999")
break;
outFile << text << endl;
}
}
outFile.close();
ifstream reader;
reader.open(fileName);
if(reader.fail())
{
cout << "Could not read file.\n";
}
else
{
cout << "Is there something you'd like to remove from " << fileName << "?\n";
cin >> text;
string oneLine;
ofstream write("tmp.txt");
while(getline(reader, oneLine))
{
if(oneLine != text)
write << oneLine << endl;
}
reader.close();
write.close();
remove(fileName.c_str());
rename("tmp.txt", fileName.c_str());
break;
}
}
}