所以这是我的代码:
int k = 1;
string sTemp = "";
do {
cout << "Enter the ID number for sequence " << k << ": ";
cin >> sTemp;
if(!bValid_digit(sTemp))
cout << "Invalid input. ID number must be 3 digits long.\n\n";
else if(bIs_taken(sTemp))
cout << "Invalid input. ID number cannot be the same as a previous member.\n\n";
else {
k++;
ID.push_back(sTemp);
stored_ID.push_back(sTemp);
}
}
while(bIs_taken(sTemp) || !bValid_digit(sTemp) || ID.size() != 10);
我正在做的是获取3位ID成员的用户输入,我有一个单独的函数bValid_digit()
,它工作正常;然后我测试是否已经使用函数bIs_taken()
获取了ID号,这也可以正常工作;然后我在do-while循环的条件下测试ID.size() != 10
,因为我只希望用户输入10个ID号,这就存在问题。当ID.size()
达到10时,为什么循环不会退出?
我在每次循环运行后通过ID.size()
测试cout
大小,并且在第10次有效ID输入后确实达到了大小10,但循环仍未结束。为什么呢?
编辑:ID
和stored_ID
都是函数中其他位置的字符串向量。
答案 0 :(得分:0)
我相信你的问题是ID.size()!= 10因为它只查找该值,如果它仍然会运行它会发生什么。
将其更改为ID.size()&lt; 10,用上面的!=在循环中不起作用..
答案 1 :(得分:0)
您可以将整个条件简化为:
while(ID.size() < 10);
由于您只在有效时将项目推送到ID,因此没有理由在while()
条件下重复有效性测试。
答案 2 :(得分:0)
您多次重新评估bIs_taken(sTemp)
:
要么
while (ID.size() != 10)
,其他两个是冗余的(如果长度无效或已经使用了id,则无法达到第十个)