1 Востаннє редагувалося AnderS0N (06.11.2016 15:43:53)

Тема: Закривається командна строка

Ку-ку.
Я виконую завдання, в кінці якого потрібно дати користувачу можливість повторно ввести пароль. Проблема в тому, що компілятор закривається. System("pause") мені не підходить, оскільки я нажимаю будь-яку кнопку і кінець. cin.get(); також мені не допоміг. Після всього вище описаного я спробував підключити директиву #include <conio.h> і в кінці коду написав _getch(); він затримує команду строку, але тільки до того часу, поки я не нажму яку-небудь кнопку. А мені потрібно так, шоб я далі продовжував вводити пароль, до тих пір, поки не введу вірний.
Ось мій код:

Прихований текст
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int p = 5;
    cout << "p=";
    cin >> p;
    {
        if (p == 5)
            cout << "Password accepted" << endl;
        if (p != 5)
            cout << "Password is incorrect" << endl;
    }
    _getch();
    return 0;
}

Ще мені цікаво як зробити так, щоб при введені не числа, мені вибивало "Password is incorrect", тому що в моєму випадку коли я ввожу букву, то мені вибиває, що пароль ввірний.

Профі, дякую за вашу увагу.

2

Re: Закривається командна строка

Оберніть вашу перевірку в цикл while(true) і робіть break після правильного вводу.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: AnderS0N1

3

Re: Закривається командна строка

На питання про повтори відповіли; про числа:
- взагалі якщо вам треба саме пароль, то треба вводити рядок, а не число;
- літери розпізнаються як правильний пароль, бо хибний результат зчитування не записується в число, і там лишається значення, яке було до цього (5). Змінні треба ініціалізувати якомога ближче до проголошення, це так, але тут задавати значення 5 явно помилково.
- перевірити, чи не сталося помилки при введені числа, можна, просто перевіривши логічне значення потоку:

if( !cin ){
  ...//обробляємо помилку
  cin.clear();//відновлюємо стан вхідного потоку
  char err;
  do {
    cin>>err;
  while( err!='\n' );//викидаємо з буфера потоку все до знаку нового рядка
}
Подякували: AnderS0N1

4

Re: Закривається командна строка

AnderS0N де твій цикл?Накинув вайл на свій код і все, ще р проініціалюзуй нулем

#include <iostream>
using namespace std;
int main()
{
    int p = 0;
    while( p != 5 )
    {
        cout << "p=";
        cin >> p;
        {
            if (p == 5)
                cout << "Password accepted" << endl;
            if (p != 5)
                cout << "Password is incorrect" << endl;
        }
    }
    system("pause");
    return 0;
}

http://codepad.org/psScigrV

Подякували: AnderS0N1