getchar()在C语言中具体作用是什么?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文

getchar() 是 C 语言标准库中的一个函数,它的作用是从标准输入流(通常是键盘)中读取一个字符

c语言getchar什么意思
(图片来源网络,侵删)

详细解释

它是什么?

getchar() 是一个函数,它的全称是 "get character"(获取字符),它定义在头文件 <stdio.h> 中,所以你在使用它之前,必须在代码开头包含这个头文件:

#include <stdio.h>

它做什么?

当你调用 getchar() 函数时,程序会暂停执行,等待用户从键盘输入。

  • 用户输入一个字符:比如用户按下键盘上的 'A' 键,然后按下回车键。
  • getchar() 读取字符getchar() 会读取输入缓冲区中的第一个字符,在上面的例子中,它读取的是 'A'。
  • 返回字符的 ASCII 码getchar() 函数会返回这个字符的 ASCII 码值。'A' 的 ASCII 码是 65。getchar() 的返回值是整数 65
  • 等待回车的原因:当你在键盘上输入时,字符并不会立即被程序读取,而是先存入一个叫做“输入缓冲区”或“标准输入流”的地方,你按下回车键,操作系统才会认为这一行输入结束了,并将缓冲区的内容交给程序处理。

它的返回值是什么?

getchar() 的返回值类型是 int(整数),而不是 char,这一点非常重要,原因如下:

  • 成功时:返回读取到的字符对应的 ASCII 码值(一个 0 到 127 之间的整数)。
  • 失败或结束时:如果输入流(比如键盘输入)结束(在 Windows/Linux 中,你可以按下 Ctrl+ZCtrl+D 来表示文件结束),或者发生读取错误,getchar() 会返回一个特殊值 EOF(End Of File,文件结束符)。

EOF 通常是一个在 <stdio.h> 中定义的宏,其值一般为 -1,因为有效的 ASCII 码都是非负数,所以用 -1 来表示“没有可读的字符”或“出错”是非常巧妙的。

c语言getchar什么意思
(图片来源网络,侵删)

一个简单的例子

这个例子会从键盘读取字符,直到遇到 EOF 为止。

#include <stdio.h>
int main() {
    int c; // 必须是 int 类型,而不是 char,为了能存储 EOF
    printf("请输入一些字符,然后按 Ctrl+D (Linux/macOS) 或 Ctrl+Z (Windows) 结束:\n");
    // 循环读取字符,直到 getchar() 返回 EOF
    while ((c = getchar()) != EOF) {
        // 将读取到的字符原样打印到屏幕上
        putchar(c); // putchar() 是输出一个字符的函数
    }
    printf("\n输入结束,\n");
    return 0;
}

代码解释:

  1. int c;:我们声明一个整型变量 c 来存储 getchar() 的返回值。绝对不能char c;,因为 char 可能无法容纳 EOF(通常是 -1)这个值。
  2. while ((c = getchar()) != EOF):这是一个非常经典的 C 语言写法。
    • c = getchar():调用 getchar() 读取一个字符,并将其返回值赋给变量 c
    • c = getchar() 这个表达式的值,就是被赋给 c 的那个值。
    • != EOF:然后将这个表达式的值与 EOF 比较,如果不相等(即成功读取到字符),则循环继续。
  3. putchar(c);:调用 putchar() 函数,将变量 c 中存储的字符(实际上是它的 ASCII 码)输出到屏幕上。

常见问题与注意事项

问题1:getchar() 会读取空格和换行符吗?

会的! getchar() 非常“笨”,它会把输入缓冲区中所有的字符都当作普通字符来读取,包括:

c语言getchar什么意思
(图片来源网络,侵删)
  • 可见字符:a, B, 1, 等。
  • 不可见字符空格 (`),**制表符** (\t),**回车/换行符** (\n`) 等。

看这个例子:

#include <stdio.h>
int main() {
    char c1, c2;
    printf("请输入两个字符,a b:\n");
    c1 = getchar(); // 读取 'a'
    c2 = getchar(); // 读取 ' ' (空格)
    printf("c1 是: %c\n", c1); // 输出 a
    printf("c2 是: %c\n", c2); // 输出 (一个空格)
    return 0;
}

如果你输入 a b 然后回车,c1 得到的是 'a',而 c2 得到的是空格,而不是你期望的 'b'

问题2:如何跳过空白字符(如空格、换行符)?

如果你想读取有意义的字符,并想忽略掉中间的空白字符,可以在 getchar() 循环内部加一个判断。

#include <stdio.h>
int main() {
    int c;
    printf("请输入一些字符,可以包含空格和换行,最后用 Ctrl+D 结束:\n");
    while ((c = getchar()) != EOF) {
        // 如果读取到的字符不是空白字符(空格、换行、制表符)
        if (c != ' ' && c != '\n' && c != '\t') {
            putchar(c); // 就打印它
        }
    }
    return 0;
}

问题3:getchar()scanf("%c", ...) 有什么区别?

它们非常相似,都会读取任何字符,包括空格和换行,但 getchar() 更简单、更纯粹,就是专门为从输入流中读取单个字符而设计的,而 scanf 是一个功能强大的格式化输入函数,scanf("%c", &c) 只是它的一个特例。


特性 描述
函数名 getchar()
头文件 <stdio.h>
功能 从标准输入(通常是键盘)读取单个字符
返回值类型 int
成功时返回 读取到字符的 ASCII 码值(整数)。
失败/结束时返回 EOF(通常是 -1)。
是否读取空白符 ,会读取空格、换行符 \n 等所有字符。
典型用途 逐个字符地处理输入,例如读取一行文本、实现简单的解析器等。

getchar() 的核心特点:读取一个字符,返回其 ASCII 码,并且会把空格、换行都当作普通字符处理,掌握了这三点,你就能很好地理解和使用它了。

-- 展开阅读全文 --
头像
C语言continue用法是什么?
« 上一篇 今天
dede5.7栏目图标怎么添加或修改?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]