Путаница в том, как внутренне работает цикл getchar ()
Я включил пример программы, используяgetchar()
ниже, для справки (не то, чтобы кто-то, вероятно, нуждался в этом), и не стесняйтесь обращаться с проблемами с этим, если хотите. Но мой вопрос:
Что именно происходит, когда программа вызываетgetchar()
?
Вот мое понимание (пожалуйста, уточните или исправьте меня):
Когда вызывается getchar, он проверяет буфер STDIN, чтобы увидеть, есть ли какие-либо входные данные.Если нет никакого ввода, getchar спит.После пробуждения getchar проверяет, есть ли какие-либо входные данные, и если нет, снова переводит их в режим сна.Шаги 2 и 3 повторяются до тех пор, пока не будет введен ввод.Как только есть ввод (который по соглашению включает в себя 'EOF' в конце), getchar возвращает первый символ этого ввода и делаетчто-то указать, что следующий вызов getchar должен вернуть вторую букву из того же буфера? Я не совсем уверен, что это такое.Когда не осталось больше символов, кроме EOF, getchar очищает буфер?Термины, которые я использовал, вероятно, не совсем верны.
#include <stdio.h>
int getLine(char buffer[], int maxChars);
#define MAX_LINE_LENGTH 80
int main(void){
char line[MAX_LINE_LENGTH];
int errorCode;
errorCode = getLine(line, sizeof(line));
if(errorCode == 1)
printf("Input exceeded maximum line length of %d characters.\n", MAX_LINE_LENGTH);
printf("%s\n", line);
return 0;
}
int getLine(char buffer[], int maxChars){
int c, i = 0;
while((c = getchar()) != EOF && c != '\n' && i < maxChars - 1)
buffer[i++] = c;
buffer[i++] = '\0';
if(i == maxChars)
return 1;
else
return 0;
}