我给n = 8时,该程序仅接受5个输入

时间:2020-05-31 07:46:27

标签: c++

给出一个整数数组,计算其元素的正数,负数和零的分数。在新行上打印每个分数的十进制值。

我写的代码:

#include <bits/stdc++.h>
#include <iostream>

using namespace std;

int main()
{
    int n;
    int a[n];
    float sum1=0,sum2=0,sum3=0;
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n;i++)
    {
        if(a[i]<0)
        {
           sum1++ ;       
        }
        else if(a[i]>0)
        {
            sum2++ ;
        }
        else
        {
            sum3++ ;
        }
    }

     cout<<(sum2/n)<<endl;
     cout<<(sum1/n)<<endl;
     cout<<(sum3/n)<<endl;
}

1 个答案:

答案 0 :(得分:2)

当我给n = 8时,该程序仅接受5个输入,请帮助我找出错误

int n;(在函数main()中)使用automatic storage class声明了一个变量,并且具有垃圾值(除非您将其初始化为int n = 100;)。因此,尚不确定什么值变量n将被保存,并且由于使用它来声明一个大小为n的int数组,因此该数组可能具有随机大小。因此,运行这样的程序可能会给您带来一些不确定的行为,可能因计算机而异,或者如果您在同一台计算机上多次运行同一程序,则可能会得到不同的行为。

从崩溃到召唤demons through your nasal passages,编译器可以自由地做任何事情。

正确的方法是:

#define MAX_ARRAY_SIZE    100

int n = 0;
int arr[MAX_ARRAY_SIZE];

int n = 0;
std::cin >> n;
int arr[n];

或使用std::vector

#include <iostream>
#include <vector>
#include <algorithm>

int main(void)
{
    int n;
    std::vector<int> arr;
    std::cin >> n;

    for(int i = 0; i < n; i++)
    {
        int e;
        std::cin >> e;
        arr.push_back(e);
    }
    int sum1 = std::count_if(std::begin(arr), std::end(arr), [] (int num) { return num < 0; });
    int sum2 = std::count_if(std::begin(arr), std::end(arr), [] (int num) { return num > 0; });
    int sum3 = n - (sum1 + sum2);

    std::cout << (float(sum2) / n) << std::endl;
    std::cout << (float(sum1) / n) << std::endl;
    std::cout << (float(sum3) / n) << std::endl;

    return 0;
}