想问这个程序错哪了?

tt201783010805 2017-12-14 05:30:04
#include <stdio.h>
int main(int argc, char *argv[])
{
int N,i,j,count=0,flag=1;
int a[100];
scanf("%d",&a[N]);
for(i=0;i<N;i++)
{
for(j=2;j<=a[i]-1;j++)
{
if(0==a[i]%2)
{
flag=0;
}
}
if(flag==1)
{
count+=1;
}
}
printf("%d",count);
return 0;
}
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaokaiV5 2017-12-15
  • 打赏
  • 举报
回复
int N,i,j,count=0,flag=1; int a[100]; scanf("%d",&a[N]); 首先int N后 N没有初始化,是随机值,很大的概率大于100; 你定义的数组a是100个成员,那么你直接scanf到a[N]里,数组99%以上会越界,程序直接就终止了。
sichuanwww 2017-12-15
  • 打赏
  • 举报
回复
代码不会说谎,错误的都是写代码的人
sky065530 2017-12-15
  • 打赏
  • 举报
回复
N没有赋值,所以N的结果是未定义的。
自信男孩 2017-12-14
  • 打赏
  • 举报
回复
scanf("%d",&a[N]);
这句不好理解啊,N 是随机值,可能是一个很大的随机值,那么a[N];必定越界呢。越界程序就可以不能运行,直接异常退出; 另外,a[100]中的所有元素也都是随机值,那么下面的操作就不能理解了。 如果楼主是想做成,输入N和N个数组元素,然后求这N个元素中偶数的个数。可以考虑这样实现:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
    int N,i,count=0;
    int a[100];
    scanf("%d", &N);

    if (N > 100)
        return 0;
    srand(time(NULL));
    for(i = 0; i < N; i++)
    {
        a[i] = rand() % 100;
        printf("%d ", a[i]);
        if (!(a[i] % 2))
            count++;
    }
    putchar(10);
    printf("total even numbers = %d\n", count);
    return 0;
}
zls9962 2017-12-14
  • 打赏
  • 举报
回复
数组不需要取地址符吧
jiht594 2017-12-14
  • 打赏
  • 举报
回复
单步调试、每走一步看看所有变量值、先确定哪里出错了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧