[英]Determine maximum value of array using a function in c [closed]
编写程序需要从用户那里获取n个元素(其中n由用户指定)并将数据存储在数组中。
然后,在屏幕上显示阵列的内容,并使用函数计算和显示最大温度。
我理解这个问题,但是每次尝试时,我总是会出错。 有人可以更正我的代码:
#include <stdio.h>
float maximum (float num[]);
int main ()
{
int i,size;
printf ("Enter total number of elements (1 to 100): \n");
scanf ("%d", &size);
float num[]={size};
for (i=1; i<=size; i++) {
printf ("Enter Number %d: ",i);
scanf ("%f", &num[i]); }
printf("Largest Number: %f", maximum (float num[]);
}
float maximum (float num[])
{
int i,size;
float num[]={size};
float max;
max=num[1];
for (i=2; i<=size; i++) {
if (num[i]>max)
max=num[i]; }
return max;
}
谢谢
float num[size]={0};
具有元素size
VLA。
也scanf ("%f", &num[i-1]);
否则,您将无法访问UB来访问数组索引。
同样在功能上
float maximum (float num[])
{
int i,size;
//float num[]={size};
float max;
max=num[0];
for (i=2; i<=size; i++) {
if (num[i-1]>max)
max=num[i-1];
}
return max;
}
示例代码:
#include <stdio.h>
#include <stdlib.h>
float mymaximum (int size, float num[]);
int main (void)
{
int i,size;
printf ("Enter total number of elements (1 to 100): \n");
if( scanf ("%d", &size) != 1){
fprintf(stderr,"Error in input");
exit(1);
}
if( size<1 && size>100){
fprintf(stderr,"Wrong input.");
exit(1);
}
float num[size];
for (i=0; i<size; i++) {
printf ("Enter Number %d: ",i);
if( scanf ("%f", &num[i]) !=1){
fprintf(stderr,"Error in input");
exit(1);
}
}
printf("Largest Number: %f", mymaximum(size,num));
return 0;
}
float mymaximum (int size, float num[])
{
float max=num[0];
for (int i=1; i<size; i++) {
if (num[i]>max)
max=num[i];
}
return max;
}
float num[]={size};
这是一个元素数组。 然后尝试访问除0
以外的所有其他索引。 这将访问数组范围之外的内存。 您有1个元素数组,除非size = 1
否则就是未定义的行为。 什么都可能发生。 包括炸毁代码或一次突然工作。
合并了一些错误检查。 如果用户输入错误或元素数量超出您的预期,我们将终止该程序。 我们没有使用100个元素数组,而是使用VLA并创建了一个具有size
元素数量的数组。
mymaximum
函数发生了什么? 之前,您已经在方法中重新声明了一个元素数组。 错了-您传递了数组,以便可以读取它。 但是你没有这样做。 而是您再次声明了一个数组,并访问了数组边界之外的位置。 是的,这是未定义的行为。
您需要这样的东西。
#include <stdio.h>
float maximum (float num[], int size);
int main ()
{
int i,size;
printf ("Enter total number of elements (1 to 100): \n");
scanf ("%d", &size);
float num[100];
for (i=0; i<size; i++) {
printf ("Enter Number %d: ",i);
scanf ("%f", &num[i]); }
printf("Largest Number: %f", maximum (num, size);
}
float maximum (float num[], int size)
{
int i;
//float num[]={size};
float max;
max=num[0];
for (i=1; i<size; i++) {
if (num[i] > max)
max=num[i]; }
return max;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.