2013-11-27 2 views
1

Итак, в предыдущем вопросе мне сказали добавить getline, чтобы сделать так, чтобы пользователи могли использовать только один символ для оператора cin. Вот моя программа:Как я могу заставить оператор getline работать?

#include <iostream> 
#include <stdio.h> 
#include <cstdio> 
#include <cstdlib> 

char Choice; 
char my_name; 


using namespace std; 

int main() 
{ 
    printf("You come out of darkness.\n"); 
    printf("Confused and tired, you walk to an abandoned house.\n"); 
    printf("You walk to the door.\n"); 
    printf("What do you do?\n"); 
    printf("1. Walk Away.\n"); 
    printf("2. Jump.\n"); 
    printf("3. Open Door.\n"); 
    printf(" \n"); 
    string line; 
    getline(cin, line); 
    while(line.size() != 1) 
    { 
     printf(" \n"); 
     cout<<"Please enter one single number!\n"; 
     printf(" \n"); 
     getline(cin,line); 
    }  
    cin >> Choice; 
    printf(" \n"); 

    if(Choice == '1') 
    { 
     printf("The House seems too important to ignore.\n"); 
     printf("What do you do?\n"); 
     printf("1. Jump.\n"); 
     printf("2. Open Door.\n"); 
     printf(" \n"); 
     cin >> Choice; 
     printf(" \n"); 
    } 
} 

Но когда я запускаю программу, она проходит через и я типа 12 и сказать: «Пожалуйста, введите одно единственное число!», Но потом, если я ставлю только 1, то ничего не происходит.

Что не так с программой?

+0

Вы хотите прочитать одно нажатие клавиши, не дожидаясь входа, верно? – Kos

+2

Прежде всего, не смешивайте старый C-style stdio с потоками C++. Возможно, он не работает так, как вы этого хотите. –

ответ

4

После getline() прогонов 1 вы вошли считаны из cin и хранится в line. Вы должны будете извлечь его оттуда. Заменить это:

cin >> Choice; 

с этим:

Choice = line[0]; 

Это все довольно основной C++; Я предлагаю вам забрать good book.

1

Angew is right, но у вас нет ничего, использующего линию в вашем цикле while. Кроме того, если пользователь просто вводит числа, вам не нужна getline. Вы можете просто использовать cin >> choice;

Смежные вопросы