2013-03-22 2 views
2

У меня есть программа, которая просит пользователя вводить ввод несколько раз и сохраняет этот ввод в разных переменных char, а затем делает вещи для этих переменных.C++ Как ограничить ввод одним символом за раз?

Моя проблема заключается в том, что я хочу ограничить ввод данных для работы по одной переменной за раз. Например:

char a = 'a', b = 'b', c = 'c'; 
cout << "Enter a "; 
cin >> a; 
cout << "\nEnter b "; 
cin >> b; 
cout << "\nEnter c "; 
cin >> c; 

cout << "Entered chars were " << a << ", " << b << ", " << c; 

Запуск этого, если пользователь вводит т у и (в том числе и промежутки между буквами) сделает программу для ввода т в переменную а, у в переменной Ь, а и в переменной с. По сути, это будет «проваливаться» и автоматически помещать значения для cin, а не просить пользователя сделать это для каждого из них.

Что я хочу, это проверить, что то, что вводит пользователь для переменной a, равно 1 char.

Я попытался использовать cin.good(), однако он возвращает 0 после ввода более одного символа для cin >> a; Я также пробовал использовать cin.get (a); а затем проверку для cin.good(). Это также возвращает 0, если пользователь вводит более одного символа.

Есть ли способ ограничить ввод для работы только для одной операции cin за раз?

+0

Вы можете просто вызвать 'ignore', чтобы убить остальную часть ввода (медленно и болезненно). – chris

+1

Используйте getline для получения одной строки за раз. Отбросьте любые избыточные значения в каждой строке. – john

ответ

8

Вы должны прочитать свой ввод строки за строкой, а затем проанализировать его. В связи с этим

std::cout << "Enter a:\n"; 
std::string input; 
std::getline(std::cin, input); 
if(input.length() != 1) 
    //error 
else 
    char a = input[0]; 
0

С языка C. Вы можете использовать getch(); которые принимают только один символ за раз.

Если вы хотите несколько символов, я имею в виду строку. вы используете getch(); с петлей. getch() is from conio.h и getche() также доступны для отображения на консоли.