2015-10-16 2 views
0

Я начинаю сейчас с C++, поэтому, я думаю, это будет очень простой вопрос.Почему cin внутри пока не останавливается, чтобы получить пользовательский ввод?

Ну, почему строка «cin >> x» внутри не останавливает цикл, чтобы получить пользовательский ввод (если пользователь вводит символ вместо числа)?

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

int main() 
{ 
    int x = 0; 
    cout << "Please, enter x: "; 
    cin >> x; 
    while (!cin) 
    { 
     cout << "Please, it must be a number!\n"; 
     cin >> x; 
    } 
    cout << "Thanks!."; 
    cin.ignore(); 
    cin.ignore(); 
} 

Я всего лишь два дня изучаю C++, поэтому я полностью ослеплю, что такое «cin». Я пробовал с «cin.sync()» и «cin.clear()», но все равно не повезло. И я знаю, что невозможно сделать что-то вроде «cin = true», или «cout < < cin».

ответ

1

Ну, ваша программа должна быть слегка

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

int main() 
{ 
    int x = 0; 
    cout << "Please, enter x: "; 
    cin >> x; 
    while (!cin) 
    { 
     cin.clear(); 
     cin.ignore(10000, '\n'); 
     cout << "Please, it must be a number!" << endl; 
     cin >> x; 
    } 
    cout << "Thanks!."; 
} 

поправили, как он работает, как ожидалось. Подробнее об этом here. В общем, вам нужно очистить все ошибочные вещи от cin.

+0

Спасибо, сейчас работает. Я пытался с cin.clear(); и cin.ignore(); Но не знаю, что такое «1000» делает внутри cin.ignore. Теперь у меня есть путь к следующему. Спасибо за код и за ссылку !. – Reaversword

0

если пользователь вводит символ, чем он примет значение символа ascii, чтобы он не остановился. Чтобы остановить цикл введите 0.

+0

Хммм ?. Я использую Visual Studio 2015. Поведение, которое я могу наблюдать, это: Введите число (даже 0)> Я получаю сообщение «спасибо», но если ввести символ, сообщение «Пожалуйста, введите число» повторяется навсегда. – Reaversword