2013-11-25 4 views
0

Я работаю над проектом палача для моего финала в моем классе C++. В моей игре палача до тех пор, пока игрок продолжает получать правильные буквы, они будут продолжать свою работу бесконечно, пока не получите слово. Кроме того, чтобы избежать повторения одной и той же буквы, я включил цикл, и массив bool, который будет установлен в true, когда выбрана буква. Моя проблема заключается в том, что я пытаюсь сделать эту игру как можно более глупым, и я, когда пытаюсь ввести несколько символов, программа будет проходить через первые несколько символов и игнорировать остальные. Получив эту проблему, я решил сделать так, чтобы пользователь мог вводить только один символ за раз, и если они будут введены, они будут проигнорированы. Поэтому мне было интересно, есть ли способ сделать это, чтобы программа принимала только один символ от пользователя за раз.Игнорирование символов в C++

Вот упрощенная версия того, что один поворот из моей программы выглядит

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstring> 
using namespace std; 
int main{ 
    char choword []='hello' 
    char alpha[26] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 
       'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 
       's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 
    int counter=0; 
    int tries=6; 
    bool rightw; 
    bool usedw; 
    bool gamew; 
    bool gameo; 
    bool lguess 
    char ch; 
    bool conturn=true; 
    gameo=false; 
    gamew=false; 
    bool conturn=true; 
    tries=6; 

    const unsigned int leng=strlen(choword); 
    bool* rightw= new bool[leng]; 
    for (unsigned int index =0;index<leng;index++){ 

     rightw[index]=false; 
     cout<<lright[index]; 
    } 

    bool* usedw= new bool[26]; 
    for(int counter11=0;counter11<26;counter11++){ 
     usedw[counter11]=false; 
    } 
      while(conturn==ture){ 
        lguess=false; 
        for(unsigned int index2=0;index2<leng;++index2){ 
       if(rightw[index2]==true){ 
        cout<<choword[index2]; 

       } 
       else{ 
        cout<<"*"; 

       } 


      } 
      cout<<"\n"; 
      for(int counter=0;counter<26;counter++){ 
       if(usedw[counter]==true){ 
        cout<<alpha[counter]; 
       } 
      } 
      cout<<"\n"; 
      cout<<"Pick a letter and guess the word player."<<endl; 
      cout<<"Please only select one letter at a time"<<endl; 
      cin>>ch; 

      ch=tolower(ch); 

      while(ch<97||ch>122){ 
       cout<<"You used the wrong type of character try again."<<endl; 
       cin>>ch; 
       ch=tolower(ch); 

      } 
      while(counter<26){ 
       if(ch==alpha[counter]&&usedw[counter]==false){ 
        usedw[counter]=true; 
        break; 
       } 
       if(ch==alpha[counter]&&usedw[counter]==true){ 
        cout<<"This letter has alread been used please enter another letter"<<endl; 
        cin>>ch; 
        while(ch<97||ch>122){ 
         cout<<"You used the wrong type of character try again."<<endl; 
         cin>>ch; 
         ch=tolower(ch); 

        } 
        counter=0; 
       } 
       else{ 
        counter=counter+1; 
       } 
      } 
      counter=0; 
      for (unsigned int index3=0;index3<leng;++index3){ 
       if (ch==choword[index3]){ 
        rightw[index3]=true; 
        lguess=true; 
        winning=winning+1; 
       } 


      } 
      if (lguess==false){ 
       tries=tries-1; 
       vonturn=false; 
      } 
      lguess=false; 
      if (winning==strlen(choword)){ 
       onaroll=false; 
      } 
      } 
} 

иметь в виду, что это только до до конца поворота материала первого игрока, как удаление динамических массивов в моей основной программа.

ответ

0

Для того, чтобы позволить пользователю вводить только характер, в то время, вы можете прочитать ввод как std::string и проверить на свою длину (я сохранил имя Ч., как и в вашем коде, это один и то же переменное):

string input; 
char ch; 
cin>>input; 
if(input.size()>1){ 
    //handle mistake 
} 
ch = input[0]; 

Информация об обращении ошибка пользователя, вероятно, лучший вариант, чтобы задать пользователю ввести снова:

string input; 
char ch; 
cin>>input; 
while(input.size() != 1){ 
    cout<<"Enter a letter, please!\n"; 
    cin>>input; 
} 
ch = input[0]; 
+0

Я забыл упомянуть, что я вроде еще новичок, как бы я справиться с ошибкой – user2340686

+0

I добавили способ обработать ошибку на мой ответ. Я надеюсь, что это достаточно ясно, и это помогает вам. – Paul92

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