2015-03-09 2 views
0

Так вот странная проблема, когда:Строка сканирования в с

if(x[j] == x[j++]) то функция scanf работает отлично, но если я могу изменить его в if(x[j] == x[j + 1]) то scanf функция массива символов вызывается бесконечное число раз.

Это произошло в двух отдельных IDE (но gcc-компиляторах). Как два влияющих друг на друга утверждения (цикл for и оператор if) влияют друг на друга?

main() 
{ 
    char line[10][100], *x; 
    int i, j, sum; 

    scanf("%d", &tc); 
    for(i = 0; i < tc; i++) 
    { 
     scanf("%s", line[i]); 
    } 


    for(i = 0; i < tc; i++) 
    { 
     j = 0; 
     sum = 0; 
     x = line[i]; 

     while(x[j] != '\0') 
      if(x[j] == x[j+1]) 
       sum++; 

     printf("%d\n", sum); 
    } 

    return 0; 
} 
+2

Где 'tc' объявлен? –

ответ

4

В этом цикле:

 while(x[j] != '\0') { 
      if(x[j] == x[j+1]) { 
       sum++; 
      } 
     } 

вы не увеличивающиеся j, так что это бесконечный цикл, неоднократно испытывать те же два символа в x[0] и x[1].

Чтобы это исправить, изменить его на:

 while(x[j] != '\0') { 
      if(x[j] == x[j+1]) { 
       sum++; 
      } 
      j++; // <<< increment j on each iteration 
     } 

или сделать его более емким с for цикла:

 for (j = 0; x[j] != '\0'; ++j) { 
      if (x[j] == x[j+1]) { 
       sum++; 
      } 
     } 
Смежные вопросы