使用函数对数组排序

时间:2018-06-26 22:42:45

标签: c arrays

我很难弄清楚这个代码。除了main()外,我还需要四个函数:读取数组元素,打印数组元素,对数组进行排序以及交换数组的两个元素。

我不能使用任何结构化代码(例如,没有gotobreakcontinue等语句。

我还需要能够通过输入比声明的数组大小(即10)更多的值来运行程序,显示错误消息,然后对输入的前10个值进行排序。我需要能够运行该程序并输入一个字符并显示错误消息,然后刷新坏数据并继续读取直到文件末尾或数组已满。

#include <stdio.h>

#define MAXSIZE 10 //max number of elements is 10

int main()
{   
    void print(const int arr[],int size);
    void sort(int arr[],int size);
    int getArray(int arr[],int max);
    int arr[MAXSIZE]; //array
    int size=getArray(arr,MAXSIZE); //size of array

    printf("The array is:\n");
    print(arr,size);
    sort(arr,size);
    printf("The sorted array is:\n");
    print(arr,size);
}

void swap(int arr[],int i,int j) //swap function
{
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

void print(const int arr[],int size) //print function
{
    int i;
    for (i = 0; i < size; i++)
        printf ("%d ",arr[i]);
    printf("\n");
}

void sort(int arr[],int size) //sort funtion
{
    void swap(int arr[], int i, int j);
    int min, min_index, i, j;

    for( i = 0; i <= size - 2; i++)
    {
        min = arr[i];
        min_index = i;
        for(j = i + 1; j < size; j++)
        {
            if (arr[j] < min)
            {
                min = arr[j];
                min_index = j;
            }
        }
        swap(arr, i, min_index);
    }
}

int getArray(int arr[],int max)
{   
    int temp = 0;
    int count = 0;
    char c;

    printf ("Enter numbers with spaces between them\n");
    scanf ("%i", &temp);
    while ((c = scanf ("%i", &temp)) != EOF || count < max)
    {
        if(c == 0){
            printf ("Invalid character. Please enter the numbers again.\n");
            while (getchar() != '\n');
        } else {
            arr[count] = temp;
            count++;
        }
        if (c == 1)
        {
            printf ("Too many values\n");
            return count;
        }
    }
    return count;
}

输出不是我想要的。这是我运行它时得到的。

Enter numbers with spaces between them
5 4 3 2 1
Too many values
The array is:
4 
The sorted array is:
4

我需要程序正确地吸收所有元素,并且如果用户仅输入5个元素,则不会抛出“太多值”。

仅当数组超过10(MAXSIZE)个元素时,才应打印“太多值”。截至目前,它仅采用数组的第一个或第二个元素。

1 个答案:

答案 0 :(得分:0)

这听起来像是您想自己做的一项任务,但是您要问的问题是您的getArray()函数。当它显示有关太多元素的错误消息时,它会检查错误的值,该值与读入的元素数量无关。您还告诉它继续尝试读取未遇到EOF 或者元素的最大数量,并且您应该查看scanf()实际返回的内容;您可能打算检查feof(stdin)。除其他错误外,该函数还通过覆盖它抛弃了它读取的第一个值。

您似乎想做的是:保留读取的元素数量的计数,在此元素小于最大值且剩余有效输入的情况下,读取元素。将输入存储在数组中;增加计数。您检查的输入是否过多应该是计数最大且feof(stdin)为假,并且应该在while循环之后,而不是在体内。