У меня проблема с моим кодом. Я хочу использовать fstream для создания файлов, а также для записи в файлы, но он создает только один файл и ничего не записывает в него, а два других не создаются. Я надеюсь, что кто-нибудь может мне помочь. Создан файл PlayerMake ofstream, а два других не созданы.
std::string line;
std::ifstream nameFree;
nameFree.open(PlayerList);
if (nameFree.is_open()) {
while (std::getline(nameFree, line)) {
if (line == name) {
std::cout << "Dieser Name ist leider bereits belegt. Bitte suche dir einen anderen aus." << std::endl;
nameFree.close();
Neu();
}
else {
std::string FileCreateCPP = "D:/Doucments/Game/" + name + ".cpp";
std::string FileCreateTXT = "D:/Doucments/Game/" + name + ".txt";
nameFree.close();
std::ofstream PlayerMake;
PlayerMake.open(PlayerList, std::ios::app);
std::ofstream cpp;
cpp.open(FileCreateCPP);
std::ofstream txt;
txt.open(FileCreateTXT);
if (cpp.is_open() && txt.is_open()) {
cpp << name;
PlayerMake << name << std::endl;
PlayerMake.close();
cpp.close();
txt.close();
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 1" << std::endl;
cpp.close();
txt.close();
Neu();
}
}
}
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 2" << std::endl;
Neu();
}
}
Я провел некоторое тестирование и немного улучшил свой код и понял, что этот код с помощью std :: cout << " Привет "<< std :: endl; не запускается. </p>
int Free = 0;
std::string name;
std::cout << "Hi. Bitte gebe deinen Namen für den neuen Spielstand ein und bestaetige es mit Enter. Falls du wieder zurück möchtest, gebe 'Exit' ein und bestaetige es ebenfalls mit Enter." << std::endl;
std::cin >> name;
if (name == "Exit") {
main();
}
else {
std::string line;
std::ifstream nameFree;
nameFree.open(PlayerList);
if (nameFree.is_open()) {
while (std::getline(nameFree, line)) {
if (line == name) {
std::cout << "Dieser Name ist leider bereits belegt. Bitte suche dir einen anderen aus." << std::endl;
Free == 0;
Neu();
}
else {
Free == 1;
}
}
nameFree.close();
if (Free == 1) {
std::cout << "Hallo" << std::endl;
std::string FileCreateCPP = "D:/Doucments/Game/Players/" + name + ".cpp";
std::string FileCreateTXT = "D:/Doucments/Game/" + name + ".txt";
std::ofstream PlayerMake;
PlayerMake.open(PlayerList, std::ios::app);
std::ofstream cpp;
cpp.open(FileCreateCPP);
std::ofstream txt;
txt.open(FileCreateTXT);
if (cpp.is_open() && txt.is_open()) {
cpp << name;
PlayerMake << name << std::endl;
PlayerMake.close();
cpp.close();
txt.close();
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 1" << std::endl;
cpp.close();
txt.close();
Neu();
}
}
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 2" << std::endl;
Neu();
}
}
}
Вот код, который вы можете запустить:
#include <iostream>
#include <string>
#include <fstream>
std::string PlayerList = "C:/PlayerList.txt";
void Neu() {
std::string name;
std::cout << "Hi. Bitte gebe deinen Namen für den neuen Spielstand ein und bestaetige es mit Enter. Falls du wieder zurück möchtest, gebe 'Exit' ein und bestaetige es ebenfalls mit Enter." << std::endl;
std::cin >> name;
if (name == "Exit") {
}
else {
std::string line;
std::ifstream nameFree;
nameFree.open(PlayerList);
if (nameFree.is_open()) {
while (std::getline(nameFree, line)) {
if (line == name) {
std::cout << "Dieser Name ist leider bereits belegt. Bitte suche dir einen anderen aus." << std::endl;
nameFree.close();
Neu();
}
else {
std::string FileCreateCPP = "D:/Doucments/Game/" + name + ".cpp";
std::string FileCreateTXT = "D:/Doucments/Game/" + name + ".txt";
nameFree.close();
std::ofstream PlayerMake;
PlayerMake.open(PlayerList, std::ios::app);
std::ofstream cpp;
cpp.open(FileCreateCPP);
std::ofstream txt;
txt.open(FileCreateTXT);
if (cpp.is_open() && txt.is_open()) {
cpp << name;
PlayerMake << name << std::endl;
PlayerMake.close();
cpp.close();
txt.close();
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 1" << std::endl;
cpp.close();
txt.close();
Neu();
}
}
}
}
else {
std::cerr << "Fehler beim erstellen deines Kontos 2" << std::endl;
Neu();
}
}
}