Запись элементов в массивы, объединение, сортировка. C++

Рейтинг: -1Ответов: 1Опубликовано: 31.03.2023

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

#define Size 5
int main()
{
    int a[Size];
    int b[Size];
    int c[Size * 2];
    int p = 0;
    int* p1;
    int* p2;
    int* p3;
    p1 = a;
    p2 = b;
    p3 = c;
    int p4;
    int p5;
    for (int i = 0; i < Size; i++) {
        scanf_s("%i",p1);
        p1++;
    }
    for (int i = 0; i < Size; i++) {
        scanf_s("%i",p2);
        p2++;
    }
    for (int i = 0; i < Size; i++) {
        p3 = p1;
        p3++;
        p1++;
    }
    for (int i = 0; i < Size; i++) {
        p3 = p2;
        p3++;
        p2++;
    }
    for (int o = 0; o < Size * 2; o++) {
        printf("%i", *p3);
        p3++;
    }
    p1 -= 5;
    p2 -= 5;
    for (int i = 0; i < Size * 2; i++) {
        for (int ii = 0; ii < (Size*2); ii++) {
            if (*p3 > *(p3 + 1)) {
                p4 = *p3;
                p3++;
                p5 = *p3;
                p3 = &p4;
                p3--;
                p3 = &p5;
                
                 
            }
        }
    }
    for (int o = 0; o < Size * 2; o++) {
        printf("%i", (*p3)++);
    }
}```

Ответы

▲ 0Принят

Немного непонятно на Си или на Си++ вы пишете программу, но т.к. вопрос в разделе плюсов, то вот вам решение на плюсах:

#include <stdio.h>
#define Size 5
int main(){
    int a[Size];
    int b[Size];
    int c[Size * 2];
    int p = 0;
    int* p1;
    int* p2;
    int* p3;
    p1 = a;
    p2 = b;
    p3 = c;
    int p4;
    int p5;
    for(int i = 0; i < Size; i++){
        scanf("%d",(p1+i));
    }
    for(int i = 0; i < Size; i++){
        scanf("%d",(p2+i));
    }
    for(int i = 0; i < Size; i++){
        *(p3+i) = *(p1+i);
    }
    for(int i = Size; i < 2*Size; i++){
        *(p3+i) = *(p2+i-Size);
    }
        
    for (int i = 0; i < Size * 2; i++) {
        for (int j = 0; j < Size * 2; j++) {
            if (*(p3+i) > *(p3 + j)) {
                int temp = *(p3+i);
                *(p3+i) = *(p3+j);
                *(p3+j) = temp;    
            }
        }
    }
    for (int i = 0; i < Size * 2; i++) {
        printf("%d", *(p3+i));
    }
    return 0;
}

Скорее всего вы запутались в указателях, когда я через дебаг программу запускал массив С[2 * Size] вообще не изменялся (не добавлялись элементы). Из-за такой путаницы адрес p3 ушел в лес и начал из пустой памяти выводить значения в консоль.