【发布时间】:2014-11-20 20:59:28
【问题描述】:
我遇到了最奇怪的问题!我需要制作一个程序,用户必须输入一个 10 位数字。所以我用 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 更改为 long long
-
int通常为 32 位宽;一个 32 位(有符号)整数的值只能达到 2**31,或者刚刚超过 20 亿,这已经是 10 位数字了。除此之外的任何内容都不适合 int,并且cin进入错误状态,它无法读取其他任何内容(如果您键入也会发生同样的情况,例如“cat”而不是数字)。验证输入的安全方法是将所有内容读取为字符串,然后检查它,如果验证通过,则将其转换为最终类型(int等)。 -
请发MCVE。