У меня есть программа, которая просит пользователя ввести количество IP-адресов для хранения в следующем массиве структур:
struct ipaddr{
int octet1;
int octet2;
int octet3;
int octet4;
}; typedef struct ipaddr ipaddr_t;
struct ipaddr addr_array[];
Мне нужно создать функцию, которая проверяет все IP-адреса внутримассив структуры и проверьте, принадлежат ли они одной и той же подсети (т. е. первые три xxx.xxx.xxx ip-адреса идентичны, например:
123.123.123.1
123.123.123.2
123.123.123.3
И затем для каждой подсети функция печатает всеIP-адреса, принадлежащие этой подсети в отдельной строке, например:
123.123.123.1 123.123.123.2 123.123.123.3 123.123.123.4
144.144.144.1 144.144.144.2 144.144.144.3 144.144.144.4
И для печати необходимо сохранить порядок IP-адресов, которые были введены пользователем
Пока у меня естьМожно было сравнить только в том случае, если две структуры имеют одну подсеть со следующей функцией:
int is_same_subnet(ipaddr_t ip1, ipaddr_t ip2){
if(ip1.octet1 == ip2.octet1 &&
ip1.octet2 == ip2.octet2 &&
ip1.octet3 == ip2.octet3){
return 1;
}
else return 0;
}
Но мне нужно сделать это для массива структур вроде этого (это не сработало, но это была моя попытка):
void print_same_subnet(const ipaddr_t addr_array[], int addr_array_len){
int i, k;
for(i=0; i < addr_array_len; i++){
for(k=1; k < addr_array_len; k++){
if(addr_array[i].octet1 == addr_array[k].octet1 &&
addr_array[i].octet2 == addr_array[k].octet2 &&
addr_array[i].octet3 == addr_array[k].octet3)
{
printf("%i.%i.%i.%i %i.%i.%i.%i \n", addr_array[i].octet1, addr_array[i].octet2, addr_array[i].octet3, addr_array[i].octet4,
addr_array[k].octet1, addr_array[k].octet2, addr_array[k].octet3, addr_array[k].octet4);
}
}
}
}
Любая помощь для начинающих очень ценится!