相关疑难解决方法(0)

关于getchar()循环如何在内部工作的困惑

我已经包含了一个使用getchar()下面的示例程序,供参考(并非任何人都可能需要它),如果您愿意,可以随意解决它的问题.但我的问题是:

程序调用时究竟发生了什么getchar()

以下是我的理解(请澄清或纠正我):

  1. 调用getchar时,它会检查STDIN缓冲区以查看是否有任何输入.
  2. 如果没有任何输入,getchar会睡觉.
  3. 唤醒后,getchar会检查是否有任何输入,如果没有,则让它自己再次进入睡眠状态.
  4. 重复步骤2和3直到有输入.
  5. 一旦有输入(按照约定在结尾处包含'EOF'),getchar返回此输入的第一个字符并执行某些操作以指示下一次调用getchar应该从同一缓冲区返回第二个字母?我不太确定那是什么.
  6. 当除了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++] = …
Run Code Online (Sandbox Code Playgroud)

c io internals getchar

3
推荐指数
1
解决办法
803
查看次数

标签 统计

c ×1

getchar ×1

internals ×1

io ×1