scanf 忽略了函数的返回值,可能是函数用错或者没有考虑到返回值异常的情况

六月陌 2019-08-22 06:49:49
#include <stdio.h>
int main (){
int n;
while(~scanf("%d",&n))
{
int a[n]={0},sum=0;
float ave;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
ave=(float)sum/n;
for(int j=0;j<n;j++)
{
if(a[j]<ave) printf("%d ",a[j]);
}
printf("\n");
}
return 0;
}
Main.c: In function ‘main’:
Main.c:6:3: error: variable-sized object may not be initialized
int a[n]={0},sum=0;
^
Main.c:6:13: warning: excess elements in array initializer
int a[n]={0},sum=0;
^
Main.c:6:13: note: (near initialization for ‘a’)
Main.c:10:4: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&a[i]);
^
辅助解释:
warning: ignoring return value of:警告:忽略了函数的返回值,可能是函数用错或者没有考虑到返回值异常的情况

我并没有用scanf的返回值啊。就是正常读取数据,为什么报错
...全文
2243 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2019-08-23
  • 打赏
  • 举报
回复
scanf的返回值i应该是输入参数的个数,一般人都会忽略它,这个警告是告诉你,这个返回值如果忽略,可能会引起不正确的结果,因为scanf函数可能没输入任何参数就返回(返回值应该为0或者负数),那么参数列表中的值(就是scanf写入的)可能就没有意义。 至于你以前没有看到这种警告,这是因为警告都是可以关闭的,在这个项目中,它被打开了,所以你就看到了,但多数情况下它都是被关闭的
六月陌 2019-08-23
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay的回复:
那只是个警告,可以忽略。问题在于你上面那个数组的定义, int a[n],n是不确定的,这个错误的意思是说,这种数组不能初始化
那个错误我已经明白了,我想知道为什么会警告啊,以前都没有这种情况的?
轻箬笠 2019-08-23
  • 打赏
  • 举报
回复
int a[n]={0}这里改下int *a = new int[n];
数组定义不允许用变量,只能用常量(或宏定义)
lin5161678 2019-08-23
  • 打赏
  • 举报
回复
引用 2 楼 轻箬笠 的回复:
int a[n]={0}这里改下int *a = new int[n]; 数组定义不允许用变量,只能用常量(或宏定义)
允许 这是VLA 这个错误是另一个问题 VLA不允许初始化 所以出错 PS 不允许初始化包括默认初始化 所以VLA不能静态存储 即 static 或者 全局
铖邑 2019-08-22
  • 打赏
  • 举报
回复
那只是个警告,可以忽略。问题在于你上面那个数组的定义, int a[n],n是不确定的,这个错误的意思是说,这种数组不能初始化

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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