浮动破坏了我的代码

时间:2017-03-30 00:04:56

标签: c++

我编写了一个返回用户定义数组中值的程序。虽然我在代码中添加了一些检查(数组大小不能为负数),但我仍然遇到一个问题,我根本无法解决(为清楚起见,假设不会使用字符串和字母字符)。

我的所有输入值都是int,但用户可以轻松输入浮点数。当他们这样做时(无论是数组大小还是输入元素)都会破坏我的代码。我已经尝试了多种尝试来捕捉这一点,但这似乎是我的计划获得价值并不能及时捕获的方式。

#include <iostream>
using namespace std;

void sort(int * a,int n)
{
    for(int i=0;i<n;++i)
        for(int j=i+1;j<n;++j)
        {
            if(a[i]>a[j])
            {
                int tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }\
        }
    return;
}

int main()
{
    int n;
    int check;
    int x;
    cout<<"Enter length of array:";
    cin>>n;
    if (n < 0){
        while (n < 0){
        cout << "Please enter a length greater than 0" << endl;
        cin >> n;
        }
    } else if (n % 1 != 0){
        while (n % 1 != 0){
            cout << "Whole numbers only! Try again" << endl;
            cin >> n;
        }
    }
    if (n == 0){
        cout <<"You try to enter numbers, but there's no place to put them." << endl;
        cout << ":(";
        return 0;
    }
    int a[n];
    cout<<"Enter values one by one:\n";
    for(int i=0;i<n;++i){
        cin >> x;
        a[i] = int(x);
    }
    sort(a,n);
    if (n % 2 == 1){
    cout<<"Median is:"<<a[n/2]<<endl;
    }
    else{
    float z = (float(a[n/2]) + float(a[(n/2)-1])) / 2;
    cout << "Median is:" << z << endl;
    }




    return 0;
}

我尝试的第一件事就是抓住漂浮物

`if (n % 1 !=0){
    while(n % 1 !=0){
        cout << "Enter a whole number"
        cin >> n
    }
}`

这仍然打破了我的计划。奇怪的是我输入了float,然后打印了n的值,它只显示了int值。

我尝试将typeid.n()#include <typeinfo>一起使用,然后将其与int类型进行比较以检查它是否为正确的值,但也是如此。

我尝试在int之后立即执行int(n)强制转换,例如n,但在它进入a[n]之前,它仍然会破坏我的float代码。

如何查看int用户输入并循环播放,直到他们给我strtotime('2 hours');

1 个答案:

答案 0 :(得分:3)

您正在阅读int

int x;
...
cin >> x;

所以它会读取它的内容,然后停在a .并将其余部分保留在流上(如果用户输入“123.4”,您将获得123,然后“.4”将不会从输入流中消耗掉。)

相反,你可以读入一个浮点数:

float x;
...
cin >> x;

并做适当的数学运算。

或者你可以读入一个字符串并将其解析为一个浮点数。这样你就不会被卡在信件上等等。

最后一个选项是读入int但是处理任何错误并跳过错误的输入,详见How to handle wrong data type input所以我不会在这里重现它。

您选择哪个选项实际上只取决于您希望程序的行为是什么以及您想要验证输入的严格程度(例如,如果输入“2.5”但是预期整数,则为圆形与失败,您如何想要处理“xyz”作为输入等。)。