忽略c ++中的字符

时间:2013-11-25 21:27:49

标签: validation visual-c++ char cin

我正在为我的c ++课程中的最后一个刽子手项目工作。在我的刽子手游戏中,只要玩家不断获得正确的字母,他们轮到他们将无限期地继续前进直到得到这个词。另外为了避免反复使用相同的字母,我包括一个循环和一个bool数组,当选择一个字母时,它将被设置为true。我的问题是我试图让这个游戏尽可能简单,当我尝试输入多个字符时,程序将通过前几个字符并忽略其余的字符。在遇到这个问题后,我决定让用户一次只输入一个字符,如果他们再输入,他们将被忽略。所以我想知道是否有一种方法可以让它一次只接受用户的一个字符。

以下是我的程序转向的简化版本

#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;
            }
           }
}

请记住,这只是在第一个播放器结束之前,例如删除动态数组就在我的主程序中。

1 个答案:

答案 0 :(得分:0)

为了允许用户一次只输入一个字符,你可以将输入读作std::string并检查它的长度(我保留了ch名称,就像你的代码一样;它是同一个变量) :

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];