到目前为止,记录最小和最大的数字

时间:2017-08-27 17:37:31

标签: c++

我正在尝试创建一个程序,它在循环中接受一个输入并跟踪到目前为止看到的最小和最大。 我写代码,但我不知道它有什么问题,这是代码:

POST https://graph.microsoft.com/beta/me/messages/AAMkAGE1M88AADUv0uFAAA=/attachments
Content-type: application/json
Content-length: 319

{ 
    "@odata.type": "#microsoft.graph.referenceAttachment", 
    "name": "Personal pictures", 
    "sourceUrl": "https://contoso.com/personal/mario_contoso_net/Documents/Pics", 
    "providerType": "oneDriveConsumer", 
    "permission": "Edit", 
    "isFolder": "True" 
} 

这是输出;

    double val = 0;
    double smaller = 0;
    double larger = 0;
    while(cin >> val){
        cout << val << '\n';
        if(val >= larger){
                larger = val;
                cout << "the larger so far\n";
        }
        else if(val <= smaller){
                smaller = val;
                cout << "the smaller so far\n";
        }
        else
            cout << "in between\n";

3 个答案:

答案 0 :(得分:3)

double smaller, larger = 0;

这相当于:

double smaller;
double larger = 0;

而不是,正如你可能已经想到的那样:

double smaller = 0;
double larger = 0;

这意味着当您开始使用它时,您将smaller未初始化,从而导致未定义的行为。

答案 1 :(得分:1)

您使用零初始化smaller,但如果您收到的数字大于0但仍然是输入中的最小值,则smaller变量将不会更新。

如果所有数字都为负数,则larger值会出现同样的问题(例如,如果输入为-1; -3,则larger将不会更新)。

有两种方法可以解决这个问题。

  1. 初始化smaller,其中保证的值小于所有输入,larger的值保证更大而不是所有的输入。
  2. 使用第一个输入数字初始化smallerlarger

答案 2 :(得分:0)

这里我解决了问题:

    double val = 0;
    double smaller = std::numeric_limits<double>::max();
    double larger = std::numeric_limits<double>::min();
    while(cin >> val){
        cout << val << '\n';
        if(val >= larger){
                larger = val;
                cout << "the larger so far\n";
        }
        else if(val <= smaller){
                smaller = val;
                cout << "the smaller so far\n";
        }
        else
            cout << "in between\n";