не в состоянии понять роль getchar и putchar здесь - PullRequest
0 голосов
/ 02 июня 2018
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c;
    c = getchar();
    while (c != EOF) {
         putchar(c);
    }
    return 0;
}

когда я скомпилирую и введу ввод ABC, а затем нажму enter, бесконечный цикл запускается как AAAAAAAAA ....

А теперь посмотрите на этот код ниже

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c;
    c = getchar();
    while (c != EOF) {
         putchar(c);
         c = getchar ();   // added this single line 
    }
    return 0;
}

В этой программе при вводе ABC выводом является ABC.Может кто-нибудь объяснить, почему он не показывает только один A в качестве вывода?

1 Ответ

0 голосов
/ 02 июня 2018

Посмотрите на приведенный ниже код, который вы упомянули

int main(void){
        int c;
        c = getchar();
        while (c != EOF) {
                putchar(c);

        }
        return 0;
}

Когда c = getchar(); выполняется и если вы предоставили ввод как ABC в время выполнения и нажмите ENTER(\n), в это время c содержит первый символ A.Затем перейдите к циклу, ваше состояние c!=EOF, то есть A!=EOF, которое всегда истинно, и оно будет печатать A бесконечно, потому что вы не запрашиваете ввод второй раз, поэтому c держит A.

правильная версия приведенного выше кода:

int main(void){
        int c;
        while ( (c = getchar())!=EOF) { /* to stop press ctrl+d */
                putchar(c);
        }
        return 0;
}

case 2: - Теперь рассмотрим второй код

int main(void){
        int c;
        c = getchar(); 
        while (c != EOF) { /*condition is true */
                putchar(c);  
                c = getchar ();/*After printing ABC, it will wait for second input like DEF, unlike case-1  */ 
        }
        return 0;
}

Может кто-нибудьпожалуйста, объясните, почему он не показывает только один A в качестве вывода? Почему он должен печатать только A, он печатает любой введенный вами ввод, такой как ABC и так далее.Просто обратите внимание, что getchar() работает с буферизованным вводом, то есть когда вы нажимаете ENTER getchar(), вы будете читать до этого, а когда читать нечего getchar() возвращает EOF.

...