Оператор If не завершает код и пропускает ввод данных пользователем

#include <iostream>
#include <cstdlib>
#include <crime>
#include <stream>
#include <cmath>
using namespace std;

char game;
char username;
char passwordOnline;
int password = 2427;
int password2 = 2724;
int answer1;
int answers;



int main()
{
cout << "Hello Welcome to PasswordHolder by ItsScrandy \n";
cout << "Please Enter The First Password: \n";
cin >> answer1;
cout << "Please Enter The Second Password \n";
cin >> answer2;

if (answer1 == password && answer2 == password2)
{
    cout << "What Is The Game Called? \n";
    cin >> game;

    cout << "What Is The Username/Email? \n";
    cin >> username;

    cout << "What Is The Password? \n";
    cin >> passwordOnline;
  }
    if (answer1 == password || answer2 == password2)
    {
        cout << "One of the password's you have enterd is incorrect";

    }
    else {
        cout << "Wrong Password";
    }

    //creating a .txt file 
    ofstream pctalk;
    pctalk.open("Login Details.txt", ios::app);

    //actually logging
    pctalk << "Game: " << game << " | " << "Username/Email: " << username << " | " << "Password: " << 
passwordOnline << "\n";
    //closing our file
    pctalk.close();
    return 0;
}

Когда я запускаю код, моя программа работает нормально, пока не запрашивает у пользователя игру. после получения ввода он автоматически запускает остальную часть оператора if. Однако то, что происходит, является вторичным вводом, если операторы пропускаются, а остальная часть кода выполняется. Кто-нибудь может сказать, почему эти операторы if не выполняются должным образом?


person Community    schedule 13.04.2020    source источник
comment
char — это одиночный символ, вместо него вы, вероятно, захотите использовать std::string.   -  person Jarod42    schedule 13.04.2020
comment
Хорошо, я изменил свои символы на строки. Как бы я использовал символы в этом примере? может быть глупый вопрос, но меня интересует ответ в учебных целях.   -  person    schedule 13.04.2020


Ответы (2)


Вы оцениваете то же самое в первом и втором утверждении для паролей. В первом заявлении:

if (answer1 == password && answer2 == password2)

Во-вторых:

if (answer1 == password || answer2 == password2)

Это то же самое. Попробуйте это для второго оператора if:

if (answer1 != password || answer2 != password2)
person Roberto C. Rodriguez-Hidalgo    schedule 13.04.2020

как говорили другие, вы используете char вместо std::string

у вас есть 3 cin в вашем коде

cout << "What Is The Game Called? \n";
cin >> game;

cout << "What Is The Username/Email? \n";
cin >> username;

cout << "What Is The Password? \n";
cin >> passwordOnline;

если в названии вашей игры более 3 символов, каждый cin дал 1 char, потому что вы только что прочитали 1 символ, а другие символы остаются в буфере cin

если вы измените эти строки

char game;
char username;
char passwordOnline;

to

std::string game;
std::string username;
std::string passwordOnline;

это будет работать нормально

person MH Alikhani    schedule 13.04.2020