2017-01-25 14 views
0

Я пытаюсь ввести базовый IP-адрес от пользователя, но моя команда застревает здесь в scanf и ничего после этого не выполняется.команда застряла по какой-то причине

int ip1,ip2,ip3,ip4; 
    scanf("%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4); 
    printf("Here"); 

Итак, в основном «Здесь» никогда не печатается, и команда scanf никогда не заканчивается?

#include <stdio.h> 
#include<math.h> 
int main(void) { 
char input; 
char rep = 'r'; 
char quit = 'q'; 
char first = '1'; 
char second = '2'; 
input = rep; 
while(input != quit) { 
    printf("What type of conversion do you want? \n"); 
    printf("Enter 1 for 32-bit number to dot-decimal conversion, 2 for the inverse of operation: "); 
     char val; 
    scanf(" %c", &val); 
    if(val == first) { 
    } else if(val == second) { 
     printf("\nEnter dot-decimal IP address:"); 

     int ip1,ip2,ip3,ip4; 
     scanf(" %d.%d.%d.%d", &ip1,&ip2,&ip3,&ip4); 
     printf("Here"); 
     unsigned int ip = 0,c,k,counter = 31; 
     for(c = 7; c >= 0; c--) { 
      k = ip1 >> c; 
      if(k & 1) { 
       int temp = 2,i; 
       for(i = 0; i < counter;i++) { 
        temp *= 2; 
       } 
       ip += temp; 
       counter--; 
      } 

     } 

     for(c = 7; c >= 0; c--) { 
      k = ip2 >> c; 
      if(k & 1) { 
       int temp = 2,i; 
       for(i = 0; i < counter;i++) { 
        temp *= 2; 
       } 
       ip += temp; 
       counter--; 
      } 
     } 


     for(c = 7; c >= 0; c--) { 
      k = ip3 >> c; 
      if(k & 1) { 
       int temp = 2,i; 
       for(i = 0; i < counter;i++) { 
        temp *= 2; 
       } 
       ip += temp; 
       counter--;    
      } 
     } 

     for(c = 7; c >= 0; c--) { 
      k = ip4 >> c; 
      if(k & 1) { 
       int temp = 2,i; 
       for(i = 0; i < counter;i++) { 
        temp *= 2; 
       } 
       ip += temp; 
       counter--;    
      } 
     } 


     printf("%u is the IP Address",ip); 

    } 
    printf("\n \n Enter r to repeat, q to quit:"); 
    scanf(" %c",&input); 
} 
return 0; 

}

Это именно то, что я делаю. Он застревает, когда я пытаюсь получить IP-адрес в десятичной нотации.

+0

показать свои данные. – BLUEPIXY

+2

Как вы проходите вход? – Inian

+0

192.162.2.3 (всего один случай) – dave

ответ

1

Я проанализировал ваш код после обновления (полный код) и обнаружил, что проблема не во входном файле с scanf, а в циклах for, которые выполняются после получения данных.

Посмотрите на этом цикле:

unsigned int ip = 0,c,k,counter = 31; 
    for(c = 7; c >= 0; c--) { 
     k = ip1 >> c; 
     if(k & 1) { 
      int temp = 2,i; 
      for(i = 0; i < counter;i++) { 
       temp *= 2; 
      } 
      ip += temp; 
      counter--; 
     } 
    } 

и особенно на for(c = 7; c >= 0; c--), принимая во внимание, что c имеет типа unsigned int ... Я вижу, что этот цикл бесконечен, потому что декремент составляет от 0 нового положительного значения UINT_MAX (см limits.h).

 Смежные вопросы

  • Нет связанных вопросов^_^