我正在为我的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;
}
}
}
请记住,这只是在第一个播放器结束之前,例如删除动态数组就在我的主程序中。
答案 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];