一、前言
在 C 语言中,getchar()& putchar()是两个非常基础、也非常常用的字符输入输出函数。
它们都声明在<stdio.h>中:
getchar:从函数名也可以看得出来,就是得到一个字符- 菜鸟教程对getchar函数的解释: 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。
putchar:当然啦,与getchar输入对应的,putchar就是输出一个字符- 菜鸟教程对putchar函数的解释:函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。
初学者在学习 C 语言时,我建议通过下面这段代码来理解它们:
#include<stdio.h>intmain(){intch;//定义一个变量ch,不能是char,因为char是c语言关键字printf("请输入文本:");ch=getchar();//将屏幕上的字符赋值给变量chwhile(ch!=' ')/*注意,这里需要用''而不是""。 这是因为单引号表示是的字符,而双引号则是字符串。 而众所周知的,字符串是不能用==来判断的,因为比较的是内存地址,无意义。*/{putchar(ch);//输出变量chch=getchar();//重新给ch赋值}return0;}这段代码的功能是:不断读取字符并输出,直到遇到空格为止。同理,我们也可以稍做修改,让他读到换行\n或者某个的字符(不包含那个字符)为止
二、getchar 和 putchar 的函数原型
在标准库中,它们的原型大致如下:
intgetchar(void);intputchar(intc);1. getchar 的原型
intgetchar(void);void表示它不接受参数;- 返回值类型是
int,不是char; - 成功时返回读取到的字符;
- 失败或遇到文件结束标志时返回
EOF。
EOF是End Of File的缩写,通常定义在<stdio.h>中,值一般为-1。
2. putchar 的原型
intputchar(intc);- 参数
c是要输出的字符; - 返回值类型是
int; - 成功时返回写入的字符;
- 失败时返回
EOF。
虽然参数是int,但实际输出时,putchar会把参数转换为字符形式输出。
三、示例代码运行效果
假设程序运行后输入:
hello world输出结果为:
hello因为程序会逐个读取字符并输出,直到遇到空格' '为止。
空格本身不会被输出,遇到空格后循环结束。
如果输入:
abc def输出结果为:
abc四、getchar 详解
1. getchar 一次只读一个字符
例如:
intch;ch=getchar();如果输入:
abc那么第一次调用getchar只会读取'a',不会读取'b'和'c'。
如果想继续读取,需要再次调用:当然,getchar函数会自己接着往下读,不会傻fufu的读了a又读一遍a(
ch=getchar();// 读取 'b'ch=getchar();// 读取 'c'2. getchar 的返回值
getchar返回的是读取到的字符的 ASCII 值。
例如:
intch=getchar();如果输入A,那么ch的值就是65,也就是字符A的 ASCII 码。如果你此时操作ch的值,例如ch+=1·;之后那么输出的结果会从A变成B(
如果输入结束或者读取失败,getchar会返回EOF。
3. 为什么用 int 接收 getchar 的返回值?
因为getchar需要返回所有可能的字符,还需要返回EOF。
char类型可能无法表示EOF,特别是在某些编译器中,char可能是无符号的。
所以标准写法是:
intch;ch=getchar();而不是:
charch;ch=getchar();五、putchar 详解
1. putchar 一次输出一个字符
例如:
putchar('A');输出:
A也可以输出转义字符:
putchar('\n');输出一个换行。
2. putchar 的参数
putchar的参数是int类型,但实际输出的是字符。
例如:
putchar(65);会输出字符:
A因为65是字符A的 ASCII 码。
3. putchar 的返回值
putchar成功时返回写入的字符,失败时返回EOF。
大多数情况下,我们不需要检查它的返回值,但在一些对错误处理要求较高的程序中,可以检查。反正我还没有还没有学到
六、常见标准写法:循环读取直到 EOF
getchar和putchar最常见的组合用法,就是逐字符复制输入:
#include<stdio.h>intmain(){intch;while((ch=getchar())!=EOF)//只要没有遇到End of flie就一直循环({putchar(ch);}return0;}这段代码会不断读取字符并输出,直到遇到文件结束标志EOF。
注意括号:
while((ch=getchar())!=EOF)不能写成:
while(ch=getchar()!=EOF)因为!=的优先级高于=,不加括号会导致逻辑错误。
在 Windows 下,可以按Ctrl + Z再按回车表示EOF。
在 Linux 或 macOS 下,可以按Ctrl + D表示EOF。
七、常见的注意事项
1. 用 int 接收 getchar 的返回值
推荐:
intch;ch=getchar();不推荐:
charch;ch=getchar();2. 注意 ’ ’ 和 " " 的区别
' '是字符常量,表示一个空格字符;" "是字符串常量,表示包含一个空格的字符串。
在while (ch != ' ')中,必须使用单引号。毕竟双引号也比不了,只会返回true,让循环一直进行,形成死循环。
3. getchar 会读取换行符
如果输入时按了回车,getchar可能会读取到'\n'。
如果希望遇到换行也停止,可以写成:
while(ch!=' '&&ch!='\n'&&ch!=EOF)4. 最好检查 EOF
原示例只判断了空格,没有判断EOF。
更安全的写法是:
while(ch!=' '&&ch!=EOF){putchar(ch);ch=getchar();}5. getchar 和 putchar 是逐字符处理的
它们适合处理字符流,例如:
- 字符统计;
- 逐字符复制;
- 简单加密;
- 大小写转换;
- 读取一行文本。
如果需要读取字符串,通常会使用fgets等函数。
总结
getchar和putchar是 C 语言中处理字符输入输出的基础函数。
核心要点如下:
getchar从标准输入读取一个字符;putchar向标准输出写入一个字符;getchar的返回值建议用int接收;- 使用
getchar时,最好检查EOF; ' '是空格字符," "是字符串;getchar每次调用都会读取下一个字符;- 标准复制输入的写法是:
intch;while((ch=getchar())!=EOF){putchar(ch);}掌握这两个函数之后,就可以进一步学习字符统计、逐字符加密、文本复制等操作。
如果这篇文章对你有帮助,欢迎点赞、收藏、关注。
标签:C语言getcharputchar字符输入输出编程入门