указание значения cin (c ++) - PullRequest
0 голосов
/ 04 февраля 2012

скажи, что у меня есть:

int lol;
cout << "enter a number(int): ";
cin >> lol
cout << lol;

Если я введу 5, то получит 5. Если я наберу fd, то найдет несколько цифр.Как я могу указать значение, например сказать, что я хочу только int?

1 Ответ

7 голосов
/ 04 февраля 2012

Если вы введете fd, он выведет несколько цифр, потому что эти цифры есть то, что lol имеет в них, прежде чем оно будет присвоено. cin >> lol не записывает в lol, потому что у него нет приемлемого ввода для вставки, поэтому он просто оставляет его в покое, и значение равно тому, что было до вызова. Затем вы выводите его (который является UB).

Если вы хотите убедиться, что пользователь ввел что-то приемлемое, вы можете заключить >> в if:

if (!(cin >> lol)) {
    cout << "You entered some stupid input" << endl;
}

Также вы можете присвоить lol перед чтением, чтобы в случае сбоя чтения оно все же имело какое-то приемлемое значение (и не для использования в UB):

int lol = -1; // -1 for example

Если, например, вы хотите выполнить цикл до тех пор, пока пользователь не предоставит вам верный ввод, вы можете сделать

int lol = 0;

cout << "enter a number(int): ";

while (!(cin >> lol)) {
    cout << "You entered invalid input." << endl << "enter a number(int): ";
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

// the above will loop until the user entered an integer
// and when this point is reached, lol will be the input number
...