打印输入的最小数字(不包括任何底片)

时间:2015-07-12 05:28:31

标签: c++ min

我正在编写的程序允许用户输入任意数量的正整数。但是,当有人输入负数时,它应该退出。

到目前为止,我对所有这些都很有用。我的下一个问题是打印最小的正数。

这是我的代码:

#include <iostream>
#include <iomanip> 

using namespace std;

int main()
{
    int input; 
    int count; 
    int min; 

    count = 0;

    cout << "Input a positive integer to begin: ";
    cin >> input; 
    count++; 

    while(input > 0)
    {
        cout << "Continue to input positive integers. Enter negative number to exit: ";
        cin >> input; 
        count++;
        min = input; 

        if (input < min);
        min = input; 

        if (input < 0)
        {
            cout << "\nLowest number: " << min << endl; 
            cout << "Total numbers inputed: " << --count << endl;
            break; 
        }
    }
}

到目前为止,代码在运行时给了我这个:

输入一个正整数开始:45

继续输入正整数。输入负数退出:48

继续输入正整数。输入负数退出:74

继续输入正整数。输入负数退出:1

继续输入正整数。输入负数退出:-1

最低编号:-1

输入的总数:4

但是我希望它打印出最小数字是1或者用户输入的任何小的POSITIVE整数。

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:1)

你有2个问题导致这个问题:

1:

if (input < min);

你不应该在if之后放置半冒号,无论是真是假,if之后的代码都会执行

2:解决第一个问题后:

 if (input < min)
        min = input; 

它会将具有条件的任何input分配给min,甚至是负数 所以你必须添加另一个条件以确保input为正,然后分配

 if ((input < min) && (input > 0))
          min = input;

编辑:您需要移除min = input;

之前的if

完整的代码:

#include <iostream.h>
#include <iomanip.h>



int main()
{
     int input;
     int count;
     int min;

     count = 0;

     cout << "Input a positive integer to begin: ";
     cin >> input;
     count++;

     while(input > 0)
     {
          cout << "Continue to input positive integers. Enter negative number to exit: ";
          cin >> input;
          count++;


          if ((input < min) && (input > 0))
             min = input;

          if (input < 0)
          {
                cout << "\nLowest number: " << min << endl;
                cout << "Total numbers inputed: " << --count << endl;
                break;
          }
     }
}

答案 1 :(得分:0)

在检查是否为否定之前,您需要更新最少的号码:

if (input < min)
    ...
if (input < 0)
    ...

您需要做的就是交换两个if块,以便在遇到负数时,程序首先检查它是否为负数,并在第二个if块之前执行break

此外,您的代码中似乎还有一个额外的分号(以及额外的分配?)