C语言错误

要求是这样的:2、统计一组数据中正数、负数和零的个数。问题描述从键盘输入一组整数(不超过20个),然后统计该组数中的正数、负数和零的个数并输出。输入数据包括两行:第一行为... 要求是这样的:

2、统计一组数据中正数、负数和零的个数。
问题描述
从键盘输入一组整数(不超过20个),然后统计该组数中的正数、负数和零的个数并输出。
输入数据包括两行:第一行为需要输入的数据个数,第二行为一组数据(用空格分隔)
输出数据只有一行:三个整数(分别是正数个数 负数个数 零的个数,用空格分隔)。
输入输出举例:
输入:
6
8 -6 5 0 1 -2
输出:
3 2 1

然后我是这样写的:
#include<stdio.h>
void main()
{
int i,j=0,k=0,g=0,q;
float a[];
printf("想要多少个数啊\n");
scanf("%d",&i);
if(i>20||i<0)
{
printf("最多20个正数\n");
}
else if(i=0)
{
printf("你在逗我\n");
}
else
{
printf("请输入你的%d个数:\n",i);
for(q=1;q<i;q++){
scanf("%f",&a[q]);
if(a[q]<0){
j+=1;
}
else if(a[q]=0){
k+=1;
}
else if(a[q]>0||(int)a[q]=a[q])
{
g+=1;
}
}
}
printf("正数有%d个\n",g);
printf("零有%d个\n",k);
printf("负数有%d个\n",j);
}

为什么说我flaot a[]是错误的?
D:\Microsoft Visual Studio\123.cpp(5) : error C2057: expected constant expression
D:\Microsoft Visual Studio\123.cpp(5) : error C2466: cannot allocate an array of constant size 0
D:\Microsoft Visual Studio\123.cpp(5) : error C2133: 'a' : unknown size
执行 cl.exe 时出错.

123.exe - 1 error(s), 0 warning(s)
展开
 我来答
匿名用户
2014-06-18
展开全部
float a[]是个指针吧不能直接拿来用,

可以在printf("请输入你的%d个数:\n",i);之前把float a[] new出来

a=new float[i];
更多追问追答
追问
指针是前面带*的吧
追答
我没有运行你的程序,那个是指针数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d35514f
2014-06-18 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:112万
展开全部
float a[] 没有指定数组长度,
更多追问追答
追问
变成a[q]也没用啊
追答
把你的错误提示贴出来
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-06-19
展开全部

你的错误有两处

  1. 没有指定数组a的大小,动态指定大小可以把数组a的定义移动到scanf函数之后。这里就是scanf("%d",&i);float a[i];

  2. 比较语句写成了赋值语句,比较应该是双等号'=='而不是'='。你这里每个都写成了赋值

    还有,关于main函数的返回值类型最好写成int类型的而不是void类型,因为没有哪个C标准允许过void main()这种写法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-08-07
展开全部
  1. 你的float a[]没有大小,float a[40]={0};就可以了

  2. else if(i=0)改成else if(i==0)

  3. for(q=1;q<i;q++)改成for(q=0;q<i;q++)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式