找到使用无限循环 C++ 时输入的最小值

问题描述

我的任务是找到用户应该在无限循环中输入的 n 个输入值之间的最小数字,直到输入某个数字或字符以停止循环。

我面临的问题是,我无法获得测试输入以查看输入的数字中哪个最小的条件。另外,第二个问题是,我想用 char 而不是 int 来结束循环,但我不知道这是否可能。

我在网上搜索,但找不到任何答案。

旁注:我是 C++ 的新手。我使用的是 Borland C++ v5.02。

#include <iostream>
#include <conio.h>

int I,min =0;
cout<<"Enter a number :";

do{
    cin >> I;
    if (I < min){
        if (I > 0){
            min = I;
        }
    }
}while (I > -1);

cout << min;

解决方法

我使用 try-catch blockstoi() 解决了您的问题。

stoi() 用于将字符串转换为数字。如果输入的数字不可转换(意味着输入了 char 并且循环应该中断),则 const std::invalid_argument & e 被捕获并自动中断循环。

#include <iostream>
using namespace std;

int main()
{
    int Min = INT_MAX; string I; int x;

    do
    {
        cout << "Enter a number or a char : ";

        cin >> I; 
        try
        {
            x = stoi(I);
            if (x < Min)
            {
                if (x > 0) {Min = x;}
            }
        }
        catch(const std::invalid_argument & e) {break;}
    }
    while(x > 0);

    cout << "Minimum positive number entered : " << Min;
}

输出:

Enter a number or a char : 10
Enter a number or a char : 8
Enter a number or a char : 5
Enter a number or a char : 7
Enter a number or a char : a
Minimum positive number entered : 5

由于您的代码有点不清楚,我将两个约束都更改为 I>0,您可以轻松修改这一点。

对于带有 INT_MAX 的问题,如指定的 here#include <climits>#include <limits.h> 可能会有所帮助。如果问题仍然存在,解决方法是将 Min 设置为较高的值,例如 10^9

*注意:运行于 Code::Blocks 20.03,Windows 10 64 位。

,

代码的问题在于头文件,我找不到与我的编译器 Borland v5.02 c++ 一起使用的头文件,但感谢 @JerryJeremiah,他引导我找到了它。

此外,我重新声明了 min =INT_MAX;,因为我在循环中使用此代码。

代码现在正在为我工​​作。

#include <iostream>
#include <conio.h>
#include <limits.h>
int main()
{
     int I,min =INT_MAX;

     cout<<"Enter number of input :";

            do{
              cin>>I;
                if (I<min ){

                    if(I>0){
                         min =I;
                    }
                }

                }while(I>-1);

           cout<<min;
         min =INT_MAX;
         getch();
}