Больше замечаний уже сделано, в вашей программе есть несколько странных вещей
- число чтения никогда не используется, поэтому нет способа дать результат в зависимости от него
- Вы изменяете взятый , чтобы дать всем парам, но не сбрасываете его прежде, чем давать пары с прочитанным числом, предполагая, что взятый полезно, как это может работать в этом случае?
- и глобально, почему так сложно?
Вы можете сделать это двумя способами:
#include <stdio.h>
#define MIN 1
#define MAX 4
int main()
{
/* print all couples */
for (unsigned i = MIN; i <= MAX; ++i) {
for (unsigned j = MIN; j <= MAX; ++j) {
printf("(%u %u)\n", i, j);
}
}
unsigned number;
printf("Enter number from %d to %d\n", MIN, MAX);
scanf("%u", &number);
/* first way following the same order as before */
puts("same order");
if ((number >= MIN) && (number <= MAX)) {
for (unsigned i = MIN; i <= MAX; ++i) {
for (unsigned j = MIN; j <= MAX; ++j) {
if ((i == number) || (j == number))
printf("(%u %u)\n", i, j);
}
}
}
/* an other way, faster but not in the same order */
puts("different order");
printf("(%u %u)\n", number, number);
for (unsigned i = MIN; i < number; ++i) {
printf("(%u %u)\n(%u %u)\n", number, i, i, number);
}
for (unsigned i = number + 1; i <= MAX; ++i) {
printf("(%u %u)\n(%u %u)\n", number, i, i, number);
}
return 0;
}
Выполнение:
(1 1)
(1 2)
(1 3)
(1 4)
(2 1)
(2 2)
(2 3)
(2 4)
(3 1)
(3 2)
(3 3)
(3 4)
(4 1)
(4 2)
(4 3)
(4 4)
Enter number from 1 to 4
2
same order
(1 2)
(2 1)
(2 2)
(2 3)
(2 4)
(3 2)
(4 2)
different order
(2 2)
(2 1)
(1 2)
(2 3)
(3 2)
(2 4)
(4 2)