我正在尝试从用户那里获得一些数字集,比如说成绩。该代码不起作用,因为 size 在循环中被更改为随机数字

i am trying to get some sets of numbers let's say grades from the user. the code does not work since size gets changed to a random num in the loop

提问人:Danial Moghaddam 提问时间:10/5/2023 最后编辑:CliffordDanial Moghaddam 更新时间:10/5/2023 访问量:45

问:

我正在尝试从用户那里获得一些数字集,比如说成绩。该代码不起作用,因为 size 在循环中更改为随机数字。我不明白为什么大小在用户第一次输入后会得到一个随机值。当我使用数字而不是大小时,一切正常,因此询问成绩的大小会造成这个问题。

 #include <stdio.h>
 #include <stdlib.h>

 float average(int size, float array[size]);
 int size;
 float array[];
 float sum, avg;
 int i,j;

 int main()
 {
 printf("Hello there\n enter the number of grades you want to get average\n");
 scanf("%d",&size);
 printf("\n enter the grades\n");
 while(j<size)
 {
     scanf("%f",&array[j]);
     j++;
     printf("size and j are %d and %d\n",size,j);
  }

 return 0;
 }

enter image description here

size 在第一次循环后获得一个随机的大值。

数组 C while 循环 scanf

评论

2赞 Weather Vane 10/5/2023
float array[];没有元素,并且只会在非标准编译器中编译(或作为 .struct
0赞 0___________ 10/5/2023
@WeatherVane gcc 假定一个元素
0赞 Clifford 10/5/2023
这是非确定性的,而不是“随机的”"
2赞 Clifford 10/5/2023
不明白为什么我们需要您整个屏幕的屏幕截图,并且感兴趣的内容可能以_plain文本的形式发布,而不是纯文本图片

答:

2赞 0___________ 10/5/2023 #1
float array[];

Gcc 假设有 1 个元素数组,然后您将访问数组外部的元素。仅当编译器支持将其作为扩展时,此代码才会编译。这是一种未定义的行为。你需要有一个可以容纳元素的数组。size > 1size

GCC 发出警告:

<source>:7:7: warning: array 'array' assumed to have one element
    7 | float array[];
      |       ^~~~~

始终阅读警告

评论

1赞 Clifford 10/5/2023
我会走得更远,建议始终解决警告。(-Werror)