Do-while循环不会结束吗?
问题描述:
我有最奇怪的问题!我需要制作一个程序,用户必须输入一个10位数字。所以,我检查输入用do-while循环:Do-while循环不会结束吗?
do
{
cout<<"Enter a 10-digit number: "<<endl;
cin>>number;
}
while (numberOfDigits(number) != 10);
这里是numberOfDigits功能:
int numberOfDigits(int num)
{
int d = 0;
while (num > 0)
{
num /= 10;
d++;
}
return d;
}
所以,当我输入一个数小于10,它循环并转到启动(告诉我再次输入一个10位数字)。但是,当我输入的数字超过10位时,将出现无限循环,并且控制台不会停止打印“输入10位数字:”...任何想法?
答
我的猜测是你要经过int的最大范围。如果您输入的号码高于2,147,483,647
,这很可能是因为您需要10个号码。尝试使用很长时间。
int numberOfDigits(long long num)
{
long long d = 0;
while (num > 0)
{
num /= 10;
d++;
}
return d;
}
我刚试过,它对我来说工作正常。全部节目,我用来测试:(!numberOfDigits(数)= 10)
using namespace std;
int numberOfDigits(long long num)
{
long long d = 0;
while (num > 0)
{
num /= 10;
d++;
}
return d;
}
int main()
{
long long number = 0;
do
{
cout<<"Enter a 10-digit number: "<<endl;
cin>>number;
}
while (numberOfDigits(number) != 10);
return 1;
}
答
如果更改
而
到
而(numberOfDigits(数)< = 10)
这样,它将继续执行do-while循环,直到用户选择一个小于或等于的数字为止。
尝试将int更改为long long – marsh 2014-11-20 21:06:46
int通常为32位宽;一个32位(带符号)的整数值只能达到2 ** 31,或者刚刚超过20亿,这正好是10位数字。除此之外的任何东西都不适合int,并且'cin'进入一个错误状态,它不能读取任何其他东西(如果你输入的话会发生同样的情况,例如“cat”而不是数字)。验证输入的* safe *方法是将所有内容作为字符串读取,然后检查它,然后在验证通过时将其转换为最终类型('int'等)。 – Cameron 2014-11-20 21:10:20
请发布[MCVE](http://*.com/help/mcve)。 – 2014-11-20 21:14:19