2015-12-12 4 views
-1

Я пишу программу для сортировки 3 целых числа в порядке возрастания, используя указатели и я закодированы следующие:Сортировка в порядке возрастания с использованием указателей

#include <stdio.h> 
void compare_and_swap(int *const a, int *const b) { 
    int t; 

    if (*a > *b) { 
     t = *a; 
     *a = *b; 
     *b = t; 
    } 

void  sort (int * const pint1, int * const pint2, int *const pint3) 
    { 
     if (*pint1 > *pint2){compare_and_swap(pint1, pint2);} 
     if (*pint2 > *pint3){compare_and_swap(pint2, pint3);} 
     if (*pint1 > *pint3){compare_and_swap(pint1, pint3);} 
    } 

int main (void) 
    { 
     void  sort (int * const pint1, int * const pint2, int * pint3); 
     int   i1 = -5, i2 = 66, i3 =77, *p1 = &i1, *p2 = &i2, *p3 = &i3; 
     int x; 
     printf ("i1 = %i, i2 = %i, i3=%i \n", i1, i2,i3); 

     sort (p1, p2,p3); 
     printf ("i1 = %i, i2 = %i, i3= %i \n", x); 

      return 0; 
    } 

Выходной сигнал я получаю некоторые значения для мусора:

i1 = -5, i2 = 66, i3=77 
i1 = 0, i2 = 1427618548, i3= -5 
+0

Любая причина использовать постоянный определитель? – ameyCU

+0

Также вы печатаете неинициализированную переменную 'x'. Что бы вы ожидали? – ameyCU

+0

Я не понимаю, в чем ваш вопрос. У вас даже нет правильного аргумента во второй printf ... –

ответ

2

Вы передаете один аргумент printf(), где он ожидает три. Включите предупреждения компиляции, чтобы компилятор мог рассказать об этом.

printf ("i1 = %i, i2 = %i, i3= %i \n", x); 

Изменение его

printf ("i1 = %i, i2 = %i, i3= %i \n",i1,i2,i3); 

должен работать.

Также прочитайте что-нибудь об одном из самых известных и основных алгоритмов сортировки [https://en.wikipedia.org/wiki/Bubble_sort][1], поскольку ваши данные не дают правильных результатов для заданных чисел в порядке убывания
+0

Спасибо alot ,,, – compcrk

Смежные вопросы