【问题标题】:Error finding a range of values in an array在数组中查找值范围时出错
【发布时间】:2018-12-03 21:32:07
【问题描述】:

程序“读取”非负整数并填充一个最大大小为 100 的数组,直到它被填充或用户给出 -1。然后,函数 range 找到最小值和最大值并将它们“发送”给程序。对于例如,如果用户给出 67 54 78 85 -1,则值的范围是 54-85。

问题是,main 不打印范围。相反,它会打印:“值的范围是 2 - 24576000”

#include <stdio.h>
#include "simpio.h"

int read_data(int A[]);
void range(int sum,int A[100], int *r1, int *r2);

int main()
{
    int A[100], sum, max, min,i;
    int *r1,*r2;

    r1 = &max;
    r2 = &min;
    printf("Enter the elements of the array, one per line.\n");
    printf("Use -1 to signal the end of the list.\n");
    sum=read_data(A);
    range(sum,A, &max, &min);
    printf("The number of elements is: %d\n",sum);
    printf("The range of values is %d - %d",min ,max);

}

int read_data(int A[])
{
    int i,sum,value;

    sum=value=i=0;
    while ( i<100 && value !=-1)
    {
        printf("? ");
        value = GetInteger();
        if (value != -1)
            {
                A[i] = value;
                value = A[i];
                sum+=1;
            }
i++;

    }
    return sum;
}

void range(int sum,int A[100], int *r1, int *r2)
{
    int i,max,min;
    max =0;
    min = 32767;
    *r1 = min;
    *r2 = max;


    for(i=0;i<sum;i++)
    {
        if (A[i]!=-1)
        {
            if (A[i]>max)
                max = A[i];
            if (A[i]<min)
                min = A[i];
        }
    }
    *r1 = max;
    *r2 = min;
}

【问题讨论】:

  • 不清楚你想要达到什么目的。
  • "问题是,它返回值地址"这是什么意思?什么返回一个指针?当然不是 sum 函数,它是除了 main 之外唯一返回的函数。
  • 为了清楚起见,请将问题重新表述为问题
  • @chux 我怀疑 read_data 正在返回一些巨大的 int,OP 认为它是一个指针,但我不想猜测他在问什么。 "read_data" 是唯一返回的函数,它返回一个不是指针的 int "sum"。
  • 我的错误。英语不是我的母语,所以术语给我带来了困难。据我所知,函数不会“接收”实际数组而是其地址的副本。我猜这就是程序不打印元素的实际范围的原因。

标签: c arrays function pointers


【解决方案1】:

其中一个问题是您没有在函数 read_data 中增加 i 的值。

另一个问题是第四个 printf

printf("%元素个数为:%d\n",sum);

在函数 main 中有一个“%T”,printf 函数将其视为格式说明符(就像您用于整数“%d”的那个)。如果你真的想在那里写 % 你应该使用格式

printf("%%元素个数为:%d\n",sum);

它只会打印一个 %。

如果您想了解有关 printf http://www.cplusplus.com/reference/cstdio/printf/ 接受的格式说明符的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多