Если оператор не завершает код и пропускает получение пользовательского ввода - PullRequest
0 голосов
/ 13 апреля 2020
#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. Однако то, что происходит, - это вторичный ввод, если операторы пропускаются, а остальная часть кода выполняется. Может кто-нибудь сказать, почему эти, если заявления не выполняются должным образом?

Ответы [ 2 ]

0 голосов
/ 13 апреля 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;

на

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

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

0 голосов
/ 13 апреля 2020

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

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

Во втором:

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

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

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