C/C++

В чём заключается ошибка? (не могу запустить код)

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

int main()
{
int*b, i, n;
printf("Enter number of elements\n");
scanf_s("%d", &n);
b = new int[n];
for (i = 0; i < n; i++)
{
printf("Enter element [%d]\n", i + 1);
scanf_s("%d", b + i);
}
for (i = n - 1; i >= 0; i--)
{
if (( b>= 5) && (b <= 10) || (b >= 30) && (b <= 40) || (b >= 70) && (b <= 90))
printf("%d ", *(b + i));
}

return 0;
}


Нужно сделать так, чтобы массив шел в обратном порядке, если его элемент b лежит в одном из диапазонов [5, 10], [30, 40], [70, 90].
MS
Milos Sekularac
25
Что такое "элемент b"? b - это указатель на массив. Нулевой элемент?

Во-первых, b >= 5 и прочее: указатель надо разыменовать (*b).
Во-вторых, b не прирастает в цикле, на всех итерациях для сравнения берётся нулевой элемент (хотя, может, так и задумано?)
В-третьих, если в сравнении не используется переменная цикла, то зачем его делать внутри цикла? Можно вынести if наружу.
Vetalchek Wtf
Vetalchek Wtf
54 053
Лучший ответ
 for (i = n - 1; i >= 0; i--){ 
int element = *(b + i);
if ((element >= 5 && element = 30 && element = 70 && element
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
int*b, i, n;
printf("Enter number of elements\n");
scanf_s("%d", &n);
b = new int[n];
for (i = 0; i < n; i++)
{
printf("Enter element [%d]\n", i + 1);
scanf_s("%d", *(b + i)); // Вместо *(b + i) можешь использовать b[i]
}
for (i = n - 1; i >= 0; i--)
{
if (( b>= 5) && (b <= 10) || (b >= 30) && (b <= 40) || (b >= 70) && (b <= 90)) // Здесь нет логики, для какой цели ты используешь значение именного самого указателя?
printf("%d ", *(b + i)); // Вместо *(b + i) можешь использовать b[i]
}

return 0;
}
Галым A
Галым A
756