Ваш исходный код будет перезаписывать ввод перед тем, как вы его прочитаете, поэтому данные не будут обрабатываться.Обычно вы не хотите уничтожать входные данные для файлов, но если вы это сделаете, вам нужно где-то хранить новое содержимое файла.Для меньшего файла, это может быть хорошо, чтобы сделать это в памяти.Для больших файлов может быть лучше сохранить их во временном файле, а затем переместить временный файл поверх исходного ввода.
Ниже приведен пример использования STL для выполнения задачи, что позволяет сократить объем логики, которую вы используете.должен написать.
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
namespace {
static bool isVowel(char const ch) {
// '\0' is considered part of the search string, thus need to handle it separately
return (std::strchr("aeiouAEIOU", ch) != nullptr) && (ch != '\0');
}
static void setOutputExceptions(std::ostream &os) {
// Set exceptions on this we usually don't want to handle for output strings
os.exceptions(std::ios_base::badbit | std::ios_base::eofbit | std::ios_base::failbit);
}
} // close unnamed namespace
int main() {
setOutputExceptions(std::cout);
std::cout << "Enter file name: ";
std::string nahmen;
std::cin >> nahmen;
if (!std::cin) throw std::runtime_error("Unable to read file name");
std::string fileContent;
{
std::ifstream fs{nahmen};
if (!fs) throw std::runtime_error("unable to open file " + nahmen);
// we do not copy the vowels to fileContent to save space
remove_copy_if(std::istreambuf_iterator<char>(fs), std::istreambuf_iterator<char>(),
back_inserter(fileContent),
isVowel);
} // close fs
// we don't to have a input and output handle to the same file at the same time
{
std::ofstream fso;
setOutputExceptions(fso);
fso.open(nahmen);
fso << fileContent;
} // close fso
return EXIT_SUCCESS;
}