“做”循环不会结束

Do-while loop does not end?

本文关键字:结束 循环      更新时间:2023-10-16

我有最奇怪的问题!我需要制作一个程序,用户必须输入一个 10 位数字。所以我用一个do-while循环检查输入:

do
{
    cout<<"Enter a 10-digit number: "<<endl;
    cin>>number;
} 
while (numberOfDigits(number) != 10);

以下是位数函数:

    int numberOfDigits(int num)
    {
        int d = 0;
        while (num > 0)
        {
            num /= 10;
            d++;
        }
        return d;
    }
因此,当我输入小于 10

的数字时,它会循环并转到开头(告诉我再次输入 10 位数字)。但是,当我输入一个超过 10 位数字的数字时,会发生无限循环,并且控制台不会停止打印"输入 10 位数字:"......有什么想法吗?

我的猜测是你正在超过一个整数的最大范围。如果您输入的数字更高,那么2,147,483,647考虑到您需要 10 个数字,这极有可能。尝试使用长长。

int numberOfDigits(long long num)
{
    long long d = 0;
    while (num > 0)
    {
        num /= 10;
        d++;
    }
    return d;
}

我刚刚尝试过,它对我来说效果很好。我用来测试的完整程序:

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;
}

如果您更改了

而 (位数(数字) != 10)

而 (位数(数字) <= 10)

这样,它将继续执行 do-while 循环,直到用户选择了一个小于或等于的数字。