2 qq 29792145 qq_29792145 于 2016.03.30 12:38 提问

c++初学的一个小程序,求解!!
c++

#include
#include
#include
using namespace std;
在输入两个或者三个正整数的时候没问题,但是数日其他的时候虽然提示了错误,但是并不能cin>>input,而是直接跳出了循环并且显示了press any key to continue?求大神给我说一下哪里出了错~~

int main()
{
int out();
cout<<"请输入两个或者三个正整数a, b, [c],用空格隔开"<<endl;
out();
return 0;
}

int out()
{
unsigned int biggest(unsigned int a,unsigned int b,unsigned int c = 0);
unsigned int b;
char input;
vector a;

    while(1)
    {
            while(cin>>b)
            {
                    a.push_back(b);
            }

            if(a.size() == 2)
            {
                    cout<<"max is "<<biggest(a[0], a[1])<<endl;
            }
            else if(a.size() == 3)
            {
                    cout<<"max is "<<biggest(a[0], a[1], a[2])<<endl;
            }
            else
            {
                    try
                    {
                            throw runtime_error("必须有两个或者三个数的输入!") ;
                    }
                    catch(runtime_error err)
                    {
                            cout<<err.what()<<endl;
                            cout<<"错误,是否重新输入? 请输入Y 或者N"<<endl;

                            cin>>input;
                            if(input == 'Y')
                            {
                                    out();
                            }
                            else
                            {
                                    return 0;
                            }
                    }

            }
            if(((a.size() == 2 )|| (a.size() == 3)))
            {
                    break;
            }
    }


    return 0;

}
unsigned int biggest(unsigned int a,unsigned int b,unsigned int c = 0)
{
if(a < b)
{
a = b;
}
if(a < c)
{
a = c;
}

   return a;

}

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.30 13:05
已采纳

catch里面
cin>>input;前面加上(不加的话,输入缓冲区里会有遗留的字符,cin>>input会直接试图读取该字符,然后没读到执行了else分支)

cin.clear();//是用来更改cin的状态标示符的。
cin.sync();//是用来清除缓存区的数据流的。

而且有几个不明白的地方:
1.楼主如果要多次输入求最大值的话,应该每次循环开始的时候把vector清空
2.这个while(cin>>b)循环楼主是怎么跳出的?莫非是用ctrl+z?

qq_29792145
qq_29792145 谢谢了,已经解决了~~看来果然还有很多东西要学啊哈哈
一年多之前 回复
qq_29792145
qq_29792145 卡住了,,,不好意思
一年多之前 回复
qq_29792145
qq_29792145 对的我用的ctrl+z ,但是这个问题解决了又来了新问题,在输入Y给input之后再次调用out()函数,但是这一次就算输入的是正常的也就是两个或者三个数,也会输出错误提示并要求输入input,而不是press any key to continue。。
一年多之前 回复
qq_29792145
qq_29792145 对的我用的ctrl+z ,但是这个问题解决了又来了新问题,在输入Y给input之后再次调用out()函数,但是这一次就算输入的是正常的也就是两个或者三个数,也会输出错误提示并要求输入input,而不是press any key to continue。。
一年多之前 回复
qq_29792145
qq_29792145 对的我用的ctrl+z ,但是这个问题解决了又来了新问题,在输入Y给input之后再次调用out()函数,但是这一次就算输入的是正常的也就是两个或者三个数,也会输出错误提示并要求输入input,而不是press any key to continue。。
一年多之前 回复
qq_29792145
qq_29792145 对的我用的ctrl+z ,但是这个问题解决了又来了新问题,在输入Y给input之后再次调用out()函数,但是这一次就算输入的是正常的也就是两个或者三个数,也会输出错误提示并要求输入input,而不是press any key to continue。。
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.03.30 12:41

visualC++,求解一个小程序
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!