#include<stdio.h>
main()
{
char c;
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
c=getchar();
putchar(c);
}
Мой первый вопрос заключается в том, что всякий раз, когда мы используем getchar(), он создает буфер где-то в памяти, и когда мы нажимаем ввод, getchar() начинает считывать содержимое из буфера и getchar () читать только один символ за раз. Итак, в этой вышеприведенной программе, когда будет выполняться 1-й getchar(), он создает буфер в памяти, и содержимое всей строки будет храниться в буфере, предположим, я пишу "vik", когда нажимаю Enter getchar() начинает чтение содержимого из буфера, затем 'v' присваивается переменной c, а затем только 'v' сбрасывается из буфера, потому что getchar() считывает только один символ за раз. Затем в следующем операторе putchar(c) выводит на экран 'v'. Итак, теперь «ik» остается в буфере, когда выполняется 2-й оператор getchar(), он не будет снова запрашивать у пользователя запись чего-либо, потому что до тех пор, пока буфер не будет полностью очищен, он не будет снова запрашивать у пользователя написать что-то, а не прочитать его содержимое из буфера. поэтому здесь «ik» остается в масле, поэтому во 2-м операторе getchar() считывается «i» из буфера, а затем снова «i» сбрасывается из буфера и putchar(c) strong> печатает «i». Теперь 'k' остается в буфере, когда 3-й getchar() выполняет его, читает 'k' из буфера и присваивает значение c, а затем 'k' также сбрасывает из буфера. Теперь в этот момент буфер полностью сбрасывается, в буфере нет содержимого, когда 4-й getchar() выполнит свой запрос к пользователю что-то написать, потому что в буфере нет содержимого, поэтому давайте предположим, что я пишу «как» и нажимаю ввод. Теперь мой главный вопрос заключается в том, что когда я задаю два содержимого "as", и остаются два getchar() и putchar(c) для выполнения, так почему только "a" будет напечатано на экране, а не "s" также ?
И мой второй вопрос заключается в том, что если мы говорим, что когда мы используем getchar(), он создает буфер в памяти, поэтому, если мы используем fflush(stdin), он должен сбрасывать буфер. Итак, в соответствии с этим в приведенной выше программе, когда я пишу fflush(stdin) после 1-го putchar(c) вместо очистки буфера, он выполняется и выводит тот же вывод, что и вышеприведенная программа, почему?
fflush(stdin)
— это неопределенное поведение. - person Crowman   schedule 19.10.2013