Вопрос относительно выделения памяти для массива, сортировки и чисел только в программировании на C - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть программа, которую я хотел бы динамически выделить массив, который заполняется пользователем через строку аргумента терминала в Linux. После того, как пользователь введет числа, массив чисел должен быть отсортирован.

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

int main(){

    int i;
    int array[100];
    int count = 0;
    while(1){
        printf("please enter a number: \n");
        scanf("%d", &i);
        if(i == 0){
            for (int k = 0; k < count -1; k++) {
                    if(array[k] <= array[k + 1]){
                    int temp = array[k];
                    array[k] = array[k+1];
                    array[k+1] = temp;
                }
            }
            for (int j = 0; j < count; ++j)
            {
                printf("%d ", array[j]);
            }
            printf("\n");
            break;
        } else {
                array[count] = i;
                count++;
        }
    }       
}

Это сортирует массив только в том случае, если я набираю цифры от низкого до высокого, но если я ввожу цифры от высокого до низкого, например. 4, 3, 2 и затем 1, он печатает 2, 3, 1 и затем 4 вместо 1,2,3,4, которые он делает, если я набираю его таким образом. Я не хочу инициализировать массив с 100, я просто не могу заставить его работать, если я не инициализирую его. Я хочу, чтобы это было увеличено в случае необходимости.

Спасибо:)

1 Ответ

0 голосов
/ 15 сентября 2018

Ошибки / отклонения от предложенной программы:

  • Как уже упоминалось, вы хотите использовать аргументы командной строки - вам нужно main(argc,*argv[]) вместо main().
  • Для динамического выделения вам нужно malloc/calloc, но вместо этого вы использовали статический массив.

  • Ваш код показывает, что вы не понимаете концепции сортировки, оставьте программу в стороне и сначала используйте ручку и бумагу, чтобы очистить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...