Запись элементов в массивы, объединение, сортировка. C++
нужно записать цифры с клавиатуры в два массива, объединить и сортировать. Всё это нужно сделать через указатели. Не могу найти ошибку в коде.
#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)++);
}
}```
Ответы (1 шт):
Автор решения: k3k14
→ Ссылка
Немного непонятно на Си или на Си++ вы пишете программу, но т.к. вопрос в разделе плюсов, то вот вам решение на плюсах:
#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 ушел в лес и начал из пустой памяти выводить значения в консоль.