• 4461阅读
  • 5回复

[提问]程序死循环了 [复制链接]

上一主题 下一主题
离线prankish
 
只看楼主 倒序阅读 楼主  发表于: 2013-03-10
#include <iostream>

long factorial(long n)
{
    long ans = 1;
    for(long i = 2; i <= n ; i++)
    {
        ans = ans * i;
        if (ans < 0)
        {
            return -1;
        }
    }

    return ans;
}

int main()
{
    using namespace std;

    do
    {
        cout << "Please enter n (0-16): " << flush;
        long n;

        if (cin >> n)
        {
            if (n == 9999)
            {
                return 0;
            }
        }
        else
        {
            cerr << "Enter n is not a number! " << n << endl;
            continue;
        }

        if (n > 16)
        {
            cerr << "Max n is 16: "
                    << n << " is too big." <<endl;
            continue;
        }

        if (n >= 0)
        {
            long nfact = factorial(n);
            if (nfact < 0) //overflow
            {
                cerr << "overflow error: "
                        << n << " is too big." <<endl;
            }
            else
            {
                cout << "factorial(" << n << ") = " << nfact << endl;
            }
        }
        else
        {
            cerr << "Undefined: " << "factorial of a negative number: " << n << endl;
        }
    }while(true);

    return 0;
}

n 输入 非数字 比如 : 输入a   就一直死循环输出 Please enter n (0-16): Enter n is not a number!

请大家看看 这个是怎么回事。哪里代码有错了吗 ?谢谢了
离线justwake

只看该作者 1楼 发表于: 2013-03-10
回 楼主(prankish) 的帖子
楼主  认为会输出什么?
离线pxiao_xiao

只看该作者 2楼 发表于: 2013-03-10
a 是数字吗?
离线chenjau

只看该作者 3楼 发表于: 2013-03-11
感觉有点无语啊.何况这也不是qt
离线uidab

只看该作者 4楼 发表于: 2013-03-11
回 楼主(prankish) 的帖子
http://bbs.chinaunix.net/thread-719835-1-1.html

看看这里!

C++的问题!
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线0354030w

只看该作者 5楼 发表于: 2013-03-11
cin输入错误后缓存未被刷新导致死循环!
快速回复
限100 字节
 
上一个 下一个