2017-01-25 3 views
0

ユーザーから基本IPアドレスを入力しようとしていますが、私のコマンドがscanfにスタックされていて、何も実行されません。何らかの理由でコマンドがスタックする

したがって、基本的に「ここ」は決して印刷されず、コマンド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アドレスを10進表記で取得しようとすると、スタックされます。

+0

あなたの入力を示してください。 – BLUEPIXY

+2

入力をどのように渡していますか? – Inian

+0

192.162.2.3(ちょうど1つのケース) – dave

答えて

1

私はあなたのコードを更新した後(完全なコード)分析し、そのデータが得られた後に実行されるループのscanfでの入力に問題がないことを発見しました。そのループで

ルック:

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--; 
     } 
    } 

特にcはタイプunsigned intであることを考慮に入れてfor(c = 7; c >= 0; c--)で...私は(参照デクリメントが0新しい正の値UINT_MAXからなるため、このループが無限であることを確認しますlimits.h)。

関連する問題