Поведение getchar () в цикле while - PullRequest
0 голосов
/ 09 ноября 2018

Я запускаю эту программу c в терминале

#include <stdio.h>

int main() {
    int result = 0;

    while(result <= 0) 
    {
        int result = (getchar() != EOF);
        result = 2;
        printf("x");        
    }

    printf("out\n");
}

После этого я набираю слово "привет" и затем возвращаюсь. В результате я получаю несколько символов «х».

Почему это не заканчивается после первого 'x'?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Ну

#include <stdio.h>

int main() {
    int result = 0;  /* here *OUTER* result gets the value 0 */

    while(result <= 0) /* THIS MAKES THE While to execute forever */
    {
        int result = (getchar() != EOF);  /* THIS VARIABLE IS ***NOT*** THE outside result variable */
        result = 2; /* external block result is not visible here so this assign goes to the above inner result */
        printf("x");        
        /* INNER result CEASES TO EXIST HERE */
    }

    printf("out\n");
}

Как вы можете вычесть из комментариев, переменная result, которая сравнивается в тесте while, является внешней, в то время как внутренняя скрывает внешнюю, ей нельзя присвоить в теле цикл, так что цикл работает вечно. Вы получаете бесконечную строку x s, напечатанную на stdout.

0 голосов
/ 09 ноября 2018

Вы повторно объявляете (затенение result) внутри цикла while. result, используемый в while(result <= 0), - это тот, который объявлен вне цикла.

...