2012-02-04 2 views
0

что у меня есть:указав значение Cin (с ++)

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

Если я типа 5, то это будет COUT 5. Если я типа FD это couts некоторые цифры. Как я могу указать значение, например, скажу, что я хочу, чтобы он был int?

ответ

7

Если вы введете 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 
+0

Я не знаю почему, но он все еще ухаживает за случайным числом, когда я ввожу что-то, а не число, почему это? –

+1

@BartekSowka по причине, что я сказал. 'lol' имеет некоторое неинициализированное значение, и оно не изменяется, если пользователь вводит то, что не является числом. 'If' скажет вам, был ли изменен lol. Вы не должны вывести 'lol'_, если пользователь вводил что-то, что не является числом. –

+0

@BartekSowka см. Обновление в моем ответе выше для примера. –