CS50x 01 c
1 getchar()
在 C 语言里,getchar()
是一个十分常用的函数,其功能是从标准输入(一般指键盘)读取单个字符。下面为你详细介绍它的用法。
基本语法
getchar()
函数的原型定义在<stdio.h>
头文件中,语法形式如下:
c
int getchar(void);
此函数会返回用户输入的字符所对应的 ASCII 码值(类型为int
)。当遇到文件结束符(EOF)或者发生错误时,它会返回EOF
(通常被定义为-1
)。
使用示例
下面通过几个例子来说明getchar()
的常见用法。
示例 1:读取单个字符
c
#include <stdio.h>int main() {int c;printf("请输入一个字符:");c = getchar(); // 读取一个字符printf("你输入的字符是:%c\n", c);printf("对应的ASCII码值是:%d\n", c);return 0;
}
代码解释:
首先声明一个整型变量c
,用于存储getchar()
返回的字符值。程序会提示用户输入一个字符,接着调用getchar()
读取该字符。最后,分别以字符形式(%c
)和整数形式(%d
)将输入的字符及其 ASCII 码值输出。
示例 2:连续读取多个字符
c
#include <stdio.h>int main() {int c;printf("请输入一串字符,以Ctrl+D(Linux/Mac)或Ctrl+Z(Windows)结束:\n");while ((c = getchar()) != EOF) { // 循环读取字符直到文件结束printf("读取到字符:%c (%d)\n", c, c);}printf("已到达文件结束符(EOF)\n");return 0;
}
代码解释:
在这个程序中,使用while
循环不断调用getchar()
读取字符,直到用户按下Ctrl+D
(在 Linux/Mac 系统中)或者Ctrl+Z
(在 Windows 系统中),此时会返回EOF
,循环终止。每次读取到字符后,都会将其字符形式和 ASCII 码值输出。
示例 3:清除输入缓冲区
c
#include <stdio.h>int main() {int c;printf("请输入一个字符:");c = getchar();printf("你输入的字符是:%c\n", c);// 清除输入缓冲区中剩余的字符while ((c = getchar()) != '\n' && c != EOF);printf("缓冲区已清空,可以继续输入...\n");return 0;
}
代码解释:
由于getchar()
是逐字符读取输入的,当用户按下回车键(\n
)时,输入缓冲区中可能会残留多余的字符。为了避免这些残留字符对后续输入操作产生影响,使用一个while
循环将缓冲区中的字符逐个读取,直到遇到换行符\n
或者文件结束符EOF
。
注意事项
- 返回类型为
int
:要将getchar()
的返回值存储在int
类型的变量中,而不是char
类型。这是因为char
类型可能无法正确表示EOF
(通常为-1
),从而导致判断文件结束条件时出现错误。 - 输入缓冲区问题:
getchar()
只会读取一个字符,而用户输入的其他字符会留在输入缓冲区中,等待后续的输入函数读取。因此,在需要连续读取输入的场景中,要特别注意清除输入缓冲区,防止出现意外情况。 - EOF 的特殊性:在不同的操作系统中,触发 EOF 的方式有所不同。在 Linux/Mac 系统中,按下
Ctrl+D
会触发 EOF;在 Windows 系统中,需要按下Ctrl+Z
然后再按回车键才能触发 EOF。
通过上述示例和注意事项,你应该能够在 C 语言中正确使用getchar()
函数了。如果还有其他疑问,可以随时问我。
水一条帖子,我发现这个CS50x用的是MIT自己的网页编译器,自己写了一个库函数,有点古怪呢......