печать stdin char по char до конца файла

нас попросили сделать небольшую программу, которая печатала бы каждый символ из stdin с помощью getchar ()… Я думал, что следующий код будет работать, но когда я запускаю его в консоли windows ничего не происходит, курсор висит неопределенно, как будто он ждет ввода…

int c = 0;
while(c != EOF)
{
    c = getchar();
    printf("%cn", c);
}
printf("nOut of loop!n");

я думал, что код будет печатать поток char за char, и если в stdin ничего не было, getchar() вернет EOF, и цикл остановится.. я думаю, что я неправильно что-то о том, как вводится в C, для новичка это действительно запутанно… Любая помощь!

Еще один запутанный пример:



char str[100]={0};
printf("Entrer a string: ");
scanf("%s",str); //i'll enter a string with spaces to have something to print in the loop
//let's say i enter Hello Wor^Zld!
int c = 0;
while(c!=EOF)
{
    c = getchar();
    printf("%c",c);
}
printf("Finally done with loop!!n");

когда я запускаю вышеуказанный код, я получаю следующее отображение в консоли:
Wor ->

с тем же старым курсором, висящим в ожидании ввода… Есть идеи, почему это? кажется, что Ctrl-Z + Enter «^Z-Enter » остановил дисплей, но цикл продолжается? я честно делаю все возможное, чтобы понять, но я должен быть честным, это сбивает с толку.. Заранее спасибо за помощь и терпение!


1 ответ

  1. Вы должны fflush ваши выходные данные, если вы хотите быть уверены, что это печать, когда вы хотите.
    Вы должны проверитьEOF, прежде чем пытаться распечатать ваш персонаж.

    int c;
    while((c = getchar()) != EOF)
    {
        printf("%c\n", (char)c);
        fflush(stdout);
    }
    printf("Out of loop!\n");