Регистрация
28 Окт 2013
Сообщения
91
Репутация
-3
Спасибо
0
Монет
0
288310962_ac6d56093a08ecc5d3d45a4ce82a8b7a_240x240.jpg

288310962_b86d1c07daa0cd4b83d0d96aa2f950fc_240x240.jpg

После ввода логина, когда вылазит ввод пароля и вводишь пароль, почему отображается введённый логин в строке для ввода пароля, подскажи пж как от этого избавится (
 
Чтобы избавиться от этой проблемы, вам нужно использовать функцию cin.ignore() после ввода логина. Эта функция очищает буфер ввода, что позволяет корректно вводить следующие данные. Вот пример использования: cout > login;
cin.ignore(numeric_limits::max(), '\n');

cout > password;
 
Может быть до этого был какой-то ввод с помощью cin >> ? В таком случае в буфере ввода остается висеть enter. Его, как пустую строку, считывает getline в поле логина. А сам логин уже попадает в cin >> password.

Подробнее:
оператор >> производит форматированный ввод данных, признаком окончания считается любой пробельный символ (пробел, таб, энтер). Сам пробельный символ не считывается. До оператора эти символы игнорируются, а после - остаются в буфере.
getline(cin, string) - использует символ enter как признак окончания строки. И сам этот символ стирает из буфера. Если же при вызове getline первым идет enter это считается пустой строкой (но тем не менее пустая строка - это тоже строка :) и она сохраняется в string.
 
#include
#include
#include
#include

using namespace std;

string input(const char* message) {
cout > word;
cin.ignore(0x1000, '\n');
return word;
}

class Users {
string db_path;
unordered_map db;
public:
~Users() {
save();
}
bool load(const string& path) {
ifstream inp(path);
if (!inp.is_open()) return false;
db_path = path;
string login;
string password;
while (inp >> login >> password) {
db[login] = password;
}
inp.close();
return true;
}
bool save()const {
ofstream out(db_path);
if (!out.is_open()) return false;
for (auto& [login, password] : db) {
out
 
переходи на Rust и задавай технические вопросы на Stack Overflow, к тому же не в час ночи по мск
 
Назад
Сверху