В настоящее время я работаю над проектом для школы, и независимо от того, что я делаю со своим входным файлом или реализацией, я не могу заставить его работать.
Код отлично работает в Visual Studios 2017, но теперь я нахожусь в среде Linux с использованием g ++.
Код:
getLineFromTextFile (std :: string textOrCin):
std::string getLineFromTextFile(std::string textOrCin) {
std::string currentLine;
if (textOrCin == "text") {
if (!inputStream.eof()) {
std::getline(inputStream, currentLine);
//as long as currentLine's first two digits are "//..."
while ((currentLine[0] == '/' && currentLine[1] == '/') || currentLine == "") {
std::getline(inputStream, currentLine);
}
std::cout << currentLine << "\n";
std::this_thread::sleep_for(std::chrono::milliseconds(400));
//std::this_thread::sleep_for(std::chrono::milliseconds(0));
}
else {
std::cerr << "[global::getLineFromTextFile]: Critcal Error; End of file found, can't load anymore!\n";
std::cerr << "exiting...";
throw;
}
}
else if (textOrCin == "cin") {
std::cin >> currentLine;
}
else {
std::cerr << "[global::getLineFromTextFile]: Critcal Error; Invalid 'textOrCin' input.\n";
std::cerr << "exiting...";
throw;
}
return currentLine;
}
Реализация функции:
void ZoinkersEngine::displayMainMenu(User& currentUser, std::string textOrCin) {
std::string option = "";
if (currentUser.getRole() == "admin") {
do {
std::cout << std::string(40, '\n');
std::cout << "Successfully logged in...\n\n\n";
std::cout << "Main Menu:\n";
std::cout << "[0] Order Plan\n";
std::cout << "[1] Generate Plan\n";
std::cout << "[2] Manage Profile\n";
std::cout << "[3] Manage Exhibits\n";
std::cout << "[4] Manage Animals\n";
std::cout << "[5] Manage Users\n";
std::cout << "[6] Search Animal/Exhibit by Name\n";
std::cout << "[7] Record Favorability\n";
std::cout << "[8] Log Animal/Exhibit Care\n";
std::cout << "[9] Add or Remove an Exhibit\n";
std::cout << "[10] Add or Remove an Animal\n";
std::cout << "[Cancel] To exit\n\n";
std::cout << "Please input number of selected option: ";
// std::cin >> option;
option = getLineFromTextFile(textOrCin);
//DEBUG START
std::cerr << "Option: [" << option "].\n";
std::cerr << "Option.size(): [" << option.size() "].\n";
//DEBUG END
if (option == "0") {
currentUser.calculateExhibitFav(zoinkersDirectory);
currentUser.orderPlan(zoinkersDirectory, textOrCin);
}
else if (option == "1") {
currentUser.calculateExhibitFav(zoinkersDirectory);
currentUser.generatePlan(zoinkersDirectory, textOrCin);
}
else if (option == "2") {
currentUser.manageProfile(zoinkersDirectory, textOrCin);
}
else if (option == "3") {
zoinkersDirectory.manageExhibit(currentUser.getUsername(), textOrCin);
}
else if (option == "4") {
zoinkersDirectory.manageAnimal(currentUser.getUsername(), textOrCin);
}
else if (option == "5") {
zoinkersDirectory.manageUsers(currentUser.getUsername(), textOrCin);
}
else if (option == "6") {
zoinkersDirectory.searchAnimalExhibit(textOrCin, currentUser);
}
else if (option == "7") {
currentUser.favorabilityUI(zoinkersDirectory, textOrCin);
}
else if (option == "8") {
currentUser.logExhibitCare(textOrCin);
}
else if (option == "9") {
zoinkersDirectory.addRemoveExhibit(currentUser.getUsername(), textOrCin);
}
else if (option == "10") {
zoinkersDirectory.addRemoveAnimal(currentUser.getUsername(), textOrCin);
}
else if (option == "cancel" || option == "Cancel") {
break;
}
} while (option != "cancel" || option != "Cancel");
}
Отладочный вывод:
Successfully logged in...
Main Menu:
[0] Order Plan
[1] Generate Plan
[2] Manage Profile
[3] Manage Exhibits
[4] Manage Animals
[5] Manage Users
[6] Search Animal/Exhibit by Name
[7] Record Favorability
[8] Log Animal/Exhibit Care
[9] Add or Remove an Exhibit
[10] Add or Remove an Animal
[Cancel] To exit
Please input number of selected option: 0
]ption: [0
option.size(): [2]
Мне нужно было бы указывать только «0», но, как видно из 'option.size (): [2]', есть что-то лишнее, что все портит.
Даже если это просто пустая строка в текстовом файле, он вытянет этот странный символ скремблера (размер должен быть 0, но равен 1 и все еще скремблирует).
Моя единственная мысль - использовать странный символ новой строки в моем файле .txt, который g ++ не распознает. (.txt был сделан в возвышенном текстовом редакторе).
Я попытался скопировать свой код и текстовые файлы в блокнот, сохранив его, закрыв, повторно открыв и вставив в emacs, но все же не повезло.
Примечание: все функции работают с ручным вводом с VS и G ++.
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ 1:
Я вывел опцию в текстовый файл и получил странный символ, это «^ M».