问题描述
我正在编写一个 C++ 代码,您将在其中使用 do-while 循环创建一个数组。 完整代码如下:
const int size = 10;
double *pt1;
//executable
pt1=new double[size];
int i = 0;
do{
cout <<"mile" << "[" << i << "]" << setw(3);
if(*(pt1+i) >= 100 && *(pt1+i) <= 250)
{
cin >> *(pt1+i);
i++;
}
else if( *(pt1+i) > 100 && *(pt1+i) < 250)
{
cout << "100-250 only";
continue;
}
}while(i < 10);
有一个输入验证,其中将接受的数字仅为 100-250 之间的数字,但它一直在循环……我找不到问题出在哪里。任何帮助将不胜感激!
解决方法
第一个错误是您正在在实际获得输入之前测试输入的值。这没有意义,你需要改变顺序。所以这个
if(*(pt1+i) >= 100 && *(pt1+i) <= 250)
{
cin >> *(pt1+i);
...
}
else if( *(pt1+i) > 100 && *(pt1+i) < 250)
{
...
}
应该是这个
cin >> *(pt1+i);
if(*(pt1+i) >= 100 && *(pt1+i) <= 250)
{
...
}
else if( *(pt1+i) > 100 && *(pt1+i) < 250)
{
...
}
其次我认为你的意思
else if( *(pt1+i) < 100 || *(pt1+i) > 250)
或者你可以说更好
else
那么就没有机会弄错逻辑了。当您只有两个选择时,您只需测试第一个选择并使用 else
作为第二个选择。无需测试与第一个选项相反的选项,使用普通的 else
会自动执行此操作。
也不需要循环末尾的 continue
,循环会自动继续。
最后,pt1[i]
比 *(pt1+i)
更容易阅读。