while循环中的多个条件C++
我有一个函数在输入验证后被调用。 它会检查分组大小的数字范围,它们不能小于1且不大于10,我也正在验证它用于无效字符,如字母和符号。while循环中的多个条件C++
int validateGroupSize(int groupsize[], int i)
{
while((groupsize[i] < 0 || groupsize[i] > 11) || (!(cin >> groupsize[i]))){
cout << string(60, '\n');
cout << "Please re-enter customer's group size. " << endl << "Input must be a number and must not be smaller than 1 and greater than 10: " << endl;
cin >> groupsize[i];
cin.clear();
cin.ignore(20, '\n');
}
return groupsize[i];
}
int main()
{
int groupsize[10]={0,0,0,0,0,0,0,0,0,0};
int i;
char newentry='n';
do{
cout << string(60, '\n');
cout << endl << endl << "Please enter customer's group size: " << endl;
groupsize[i]=validateGroupSize(groupsize, i);
i++;
cout << "Would you like to enter another questionare? Enter either 'y' or 'n': " << endl;
cin >> newentry;
}while((newentry =='y') || (newentry=='Y'));
system("pause");
return 0;
}
到目前为止程序工作的无效字符,因为当我输入一个字母,它会提示我的错误信息。不幸的是,当我输入一个大于10的数字时,它会简单地忽略条件并继续执行程序的其余部分。我做错了什么?
主要问题是您的代码使用未初始化的变量i
来访问groupsize
的数组元素。这样做会在你的程序上调用Undefined Behavior,使得任何由此产生的不需要的行为都在编译器的权限之内。
第一个地方发生这种情况是这一行:
groupsize[i] = validateGroupSize(groupsize, i);
^^^^^^^^^^^^
i
应在施工被初始化为0
因此上述线路将是有效的。此外,它会使后续的增量i
也有效。
里面你validateGroupSize()
功能的条件是:
while ((groupsize[i] < 0 || groupsize[i] > 11) || (!(cin >> groupsize[i]))
因为你值已经提取到数组元素之前执行验证约束这是不对的。如果groupsize
在此代码之前未被赋予默认值(全为0),则此代码将成为未定义行为的另一个候选项。
要解决这个问题,只需交换两个条件:使提取发生在实际验证之前。
最后,删除嵌套cin >> groupsize[i]
。如果参数中的条件返回true,并且循环没有中断,则当循环再次执行时将执行提取。
更新:正如@JohnnyMopp指出的那样,您的验证条件应改为他所显示的内容。
非常感谢你和@JohnnyMopp。现在它工作正常。在编程方面,我仍然是一个新手。非常有帮助,现在我明白我的问题是什么。再次感谢! – noobuser333
首先,如果你想1 < = GROUPSIZE < = 10,您的测试应该是: groupsize[i] < 1 || groupsize[i] > 10
while(!(cin >> groupsize[i]) || groupsize[i] < 1 || groupsize[i] > 10){
cin.clear();
cin.ignore(20, '\n');
cout << "Please re-enter customer's group size. " << endl << "Input must be a number and must not be smaller than 1 and greater than 10: " << endl;
}
编辑:重新布置,而根据@声明0x499602D2的建议。
再次感谢,所有作品吧! – noobuser333
主要是什么'i'? – P0W
这应该从来没有编译过。 – Panzercrisis
对不起,我忘了在这里添加int i。我在int main的while循环中找到i ++来计算它循环了多少次。 – noobuser333