std::string turnsDefined;
std::cin >> turnsDefined;
bool hasPassed;
while(hasPassed != true){
for(char c : turnsDefined){
if(isdigit(c) != true){
std::cout << "Please only use numbers to describe the amount of turns you'd like to do." << std::endl;
hasPassed = false;
break;
std::cin >> turnsDefined;
}else{
hasPassed = true;
}
}
}
我最近偶然发现了这一点。我缩短了代码(合理的数量),这样你就可以自己试一试。
此简短程序应检查您输入的内容是否包含(不需要的)字母。我不明白的事情:我写它的方式,我很确定如果我输入类似test2test的东西它会传递(即使它包含字母)只是因为if语句将识别一个单一的数字并设置{{1到真。
我希望你能理解我所写的内容。很高兴回答更多问题。
答案 0 :(得分:4)
bool hasPassed
。
你应该声明为:
bool hasPassed = false;
未初始化的自动(本地和非静态)变量包含不确定的值。 在分配值之前读取它们会导致未定义的行为。 (编译器在这里可以自由地做一些错误,但在实践中它可能包含真或假或其他一些无意义的值)
编辑
来自Andy Newman的评论:
条件if(isdigit(c) != true)
是可以保留的。因为isDigit返回int
,所以应避免将其与true
进行比较。
如果字符是a,则isDigit返回非零值(true) 数字字符,否则为0(假)。
您可以更好地将条件重写为:
if(!isdigit(c)) {
即使函数返回bool
,也要superfluous将其与true
或false
进行比较
答案 1 :(得分:1)
来自C ++标准:
以本国际标准描述的方式使用bool值 “未定义”,例如通过检查未初始化的值 自动对象,可能会使它表现得好像它既不是真的 也不是假的。