我正在尝试为学校的项目编写基于文本的游戏。到目前为止,我做得还不错,但作为完美主义者,我想要为玩家的角色设置字母名称。我一直在努力寻找解决方案。我认为问题可能在于我将自己与太多的循环混淆了。再说一遍,我不是那个最好的判断者。这就是我在代码方面的作用;这有点乱。不介意我的goto使用..
while(cin >> name){
for(int x = 0; x < name.length(); x++){
char c = name.at(x);
while(!isalpha(c)){
cin.clear();
cin.ignore(1000, '\n');
cout << "Names are alphabetical only, with no spaces.\n";
cin >> name;
for(int x = 0; x < name.length(); x++){
char c = name.at(x);
if(isalpha(c))
goto breakingout;
}
}
}
breakingout:
break;
}
我想要的其他一些可能阻碍我的事情是,我希望错误消息只出现一次(它会在一个输入中出现多个非字母字符多次),所以任何人都可以获得奖励积分可以帮助我:)
答案 0 :(得分:0)
也许更喜欢这样的东西?
bool isDone = false;
while(!isDone)
{
string input;
getline(cin, input);
isDone = true;
for(int i = 0; i<input.size(); i++)
{
if(!isAlpha(input[i]))
isDone = false;
}
}
答案 1 :(得分:0)
您只能使用一个循环和一个goto语句:
string name;
cout << "Enter your name: ";
cin >> name;
breakingout:
for(unsigned i = 0; i != name.size(); i++) {
char c = name.at(i);
if(!isalpha(c)) {
cout << "Enter your name without numbers: ";
cin >> name;
goto breakingout;
}
}
或者像这样的迭代器,建议在C ++中使用。
string name;
cout << "Enter your name: ";
cin >> name;
breakingout:
for(auto iter = name.cbegin(); iter != name.end(); iter++) {
if(!isalpha(*iter)) {
cout << "Enter your name without numbers: ";
cin >> name;
goto breakingout;
}
}