std::cout << "How many turns do you want to do?" << std::endl << std::endl << std::endl;
std::string turnsDefined;
std::cin >> turnsDefined;
//std::cin.sync();
bool hasPassed = false;
int objectSizeIniti = 0;
int objectSizePost = 0;
for(char c : turnsDefined){
objectSizeIniti++;
}
bool boolForCharIsDigi[objectSizeIniti];
for(bool _b : boolForCharIsDigi){
_b = false;
}
while(hasPassed != true){
for(char c : turnsDefined){
if(isdigit(c) == 0){
boolForCharIsDigi[objectSizePost] = false;
}else if (isdigit(c) != 0){
boolForCharIsDigi[objectSizePost] = true;
}
bool allTrue = false;
for(int i = 0; i < sizeof(boolForCharIsDigi)/sizeof(boolForCharIsDigi[0]); i++){
if(boolForCharIsDigi[i] == false){
allTrue = false;
std::cin >> turnsDefined;
std::cout << "You may only use numbers to define the amount of turns. No decimals either." << std::endl << std::endl;
break;
}else if(boolForCharIsDigi[i] == true){
allTrue = true;
hasPassed = true
}
}
}
objectSizePost++;
}
我试图理解为什么上面的代码行为如此奇怪。
我正在尝试做什么:
我得到输入并测试它是否只包含数字。如果是,它只是传递循环(将w循环检查的变量设置为true)。如果输入确实包含除数字之外的字符,则它会请求另一个输入并警告用户。
发生了什么:它随机需要一些输入来实际接受“仅数字”的输入。总体而言,整个计划只是随机行动。
答案 0 :(得分:3)
我想做的事情: 我得到的输入和测试是否只包含数字。如果它 它只是传递循环(将变量设置为w循环) 检查是否真实)。如果输入确实包含除以外的字符 数字,它请求另一个输入并警告用户。
跳过调试部分,我建议你应该std::all_of
:
if( std::all_of( turnsDefined.begin(), turnsDefined.end(), ::isdigit ) )
{
// Correct input
}
else
{
// Warn the user, re-enter stuff
}
答案 1 :(得分:2)
在你的代码中,初始化'boolForCharIsDigi'的for循环从不更新实际数组:
for(bool _b : boolForCharIsDigi){
_b = false;
}
问题是_b是一个临时变量。你需要把它作为这样的参考:
for(bool& _b : boolForCharIsDigi){
_b = false;
}
可能还有其他问题,但是这个问题突然出现在我眼中......; - )