HDU2006给你n个整数,求他们中所有奇数的乘积

问题遇到的现象和发生背景 给你n个整数,求他们中所有奇数的乘积,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数
问题相关代码,请勿粘贴截图
#include
int main()
{
    int i,n,ans=1;
    while(scanf("%d",&n)!=EOF){
        getchar();
        int a[n+1];
        for(i=0;iscanf("%d",a[i]);
        if(a[i]%2==1)ans=ans*a[i];
    }
    printf("%d\n",ans);
    }
    return 0;
}

运行结果及报错内容 输入3 1 2 3后没有输出直接结束程序
我的解答思路和尝试过的方法
我想要达到的结果 想请教一下这种在循环中重新定义a数组的写法是否合法(平时都是定义在程序开头),以及如何实现要求,感谢!

针对你提出的问题,我做了详细的思考。数组和变量一样。如果你在头部定义一个数组或则一个变量,那么他就是一个全局变量,如果你在程序内部定义一个数组和一个变量,那么它就是局部变量。局部变量和全局变量是有区别的,局部变量只能在局部起作用,全局变量是全局起作用。

img

这么改,不需要用数组,供参考:

#include<stdio.h>
int main()
{
    int a, n, ans = 1;
    while (scanf("%d", &n) != EOF) {
        ans = 1;
        while(n--) {
            scanf("%d", &a);
            if (a % 2 == 1) ans *= a;
        }
        printf("%d\n", ans);
    }
    return 0;
}

题主的代码修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i, n, ans = 1;
    while (scanf("%d", &n) != EOF) {
        getchar();
        int* a = (int*)malloc(sizeof(int) * n); //int a[n+1];
        memset(a, 0, sizeof(int) * n);          //数组置零
        for (i = 0, ans = 1; i < n; i++) {       //修改
            scanf("%d", &a[i]);
            if (a[i] % 2 == 1)ans = ans * a[i];
        }
        printf("%d\n", ans);
        free(a);                               //释放数组空间
    }
    return 0;
}

这篇文章:HDU - 2006 求奇数的乘积 也许能够解决你的问题,你可以看下