Поиск всех возможных IP-адресов, идущих в бесконечный цикл - PullRequest
2 голосов
/ 25 февраля 2020

Это проблема, когда вам нужно ввести число с ненулевыми цифрами, и программа преобразует его в IP-адрес, состоящий из 4 частей, каждая из которых меньше 255, и должен напечатать все IP-адреса.
Я попробовал этот рекурсивный метод и сталкиваюсь с бесконечным l oop.

#include<stdio.h>
#include<math.h>
int a[3];
void comuni(unsigned long n,int count){
    int i=count;
    do{
        if(count<0){
            return;
        }
        int t=pow(10,i);
        a[count]=n/t;
        int rem=n%t;
        if(a[count]<=255 &&a[count]>0 && count>=0){
            printf("%d.",a[count]);
            comuni(rem,count-1);
        }    
        i++;
    }while(1);
}

int main()
{
    //  Insert your code here.
    unsigned long n;
    scanf("%ul",&n);
    comuni(n,3);
    return 0;
}

1 Ответ

1 голос
/ 25 февраля 2020

Ваш вопрос: почему существует бесконечное число l oop.

Начиная с взгляда на while(1), меня это не удивляет.
Но подождите, внутри есть return, который используется, если count меньше 0.
Ничто внутри l oop не изменит count. Поэтому, если count больше или равно 0, для начала вы получите свой бесконечный l oop.

Я думаю, что проблема, которая вызывает эту ситуацию, заключается в том, что

int i=count;

НЕ заставить count меняться при изменении i.
Вы меняете i внутри l oop, но знаете - это не помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...