获取用户输入,以正确的索引(升序)将其添加到数组

时间:2016-09-17 18:04:48

标签: c arrays input

我对如何使其正常工作感到有些困惑。我需要从用户那里获取数字(直到他们输入负数或者他们达到最大值)并且对于他们添加的每个数字,将其按升序插入到正确的索引中。现在,由于某种原因我的数组是无限的,即使我定义了一个10的常量。这是我的代码:

#include <stdio.h>
#define MAX_SIZE 10
int addToArray(int *arr, int, int );

int main(){
    int array [MAX_SIZE];   
    int userNum = 0;
    int arrSize = 0;
    int add = 0;

    printf("Please enter a series of positive integers!\n");
    while(userNum >= 0 && arrSize< MAX_SIZE)
    {
        scanf("%d", &userNum);
        add = addToArray(array, arrSize , userNum); 
    }   

    return 0;
}

int addToArray(int *arr, int size, int num)
{
    int i, temp;
    for(i=0; i<size; i++)
    {
        if(num > arr[i+1])
        {
            temp =  num;
            num = arr[i+1];
            arr[i+1] = temp;
        }
    }
    arr[size++];
    return size;
}

edit1:是的我不确定addToArray函数是否有效,如果有人能帮助我让它工作那将是非常棒的!

edit2:输入整数后我无法对数组进行排序。当用户输入它们时,需要将其放入正确的索引

2 个答案:

答案 0 :(得分:0)

根据我的理解重述这个问题。 您想要输入整数并按升序对它们进行排序。

如果是,那么您可以使用以下代码。我修改了你的代码,有一些错误。为简单起见,您可以将排序部件移动到另一个功能。

 #include <stdio.h>
#define MAX_SIZE 10
int addToArray(int *arr, int, int );
int main(){
    int array [MAX_SIZE];
    int i=0,j=0,num=0;
    printf("Please enter a series of positive integers!\n");
    for(i=0;i<MAX_SIZE;i++)
    {
        scanf("%d", &array[i]);
    }
    for(i=0;i<MAX_SIZE;i++)
    {
        printf("Before sort:Array[%d]=%d\n",i,array[i]);
    }
   /*sorting array*/
    for (i = 0; i < MAX_SIZE; ++i)
    {
        for (j = i + 1; j < MAX_SIZE; ++j)
        {
            if (array[i] > array[j])
            {
                num =  array[i];
                array[i] = array[j];
                array[j] = num;
            }
        }
    }
    for(i=0;i<MAX_SIZE;i++)
    {
        printf("After sort:Array[%d]=%d\n",i,array[i]);
    }
}

答案 1 :(得分:0)

像这样解决:

#include <stdio.h>
#define MAX_SIZE 10

int addToArray(int *arr, int, int );

int main(void){
    int array[MAX_SIZE];
    int userNum = 0;
    int arrSize = 0;

    printf("Please enter a series of positive integers!\n");
    while(arrSize< MAX_SIZE){
        if(1 != scanf("%d", &userNum) || userNum < 0)
            break;//Invalid input is not used
        arrSize = addToArray(array, arrSize , userNum);//update arrSize
    }

#if DEBUG
    //check print for debug
    for(int i = 0; i < arrSize; ++i)
        printf("%d ", array[i]);
    puts("");
#endif

    return 0;
}

int addToArray(int *arr, int size, int num){
    int i, temp = num;

    for(i = 0; i < size; i++){
        if(temp < arr[i]){//insert point
            num = temp;
            temp =  arr[i];//temp as new insert value
            arr[i] = num;
        }
    }
    arr[size++] = temp;

    return size;
}