C语言 getchar()、get()、scanf()函数的区别

本文详细介绍了C语言中用于输入的三个关键函数:getchar()、gets()和scanf()。getchar()用于接收单个字符,gets()接收字符串并忽略空格,而scanf()在读取字符串时会受空格和制表符的影响。此外,还讨论了如何处理缓冲区残留数据,并比较了不同函数在读取字符和字符串时的结束标志和回车符处理方式。同时,提到了非标准函数getch()及其替代方案。

输入getchar()函数:
getchar()函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符,按回车符时退出。使用本函数前必须包含文件“stdio.h”。

输入gets()函数:
gets()函数接受字符串,同时也可以接受字符串中含有空格符。但是scanf(“%s”,str)不能接受含有空格符的字符串,scanf()函数取数据是遇到回车、空格、TAB就会停止,剩余字符串将留在缓冲区中。

输入scanf()函数:
1:用于保存读入值的变量必须都是变量指针,即相应变量的地址。

2:在输入流中,数据项必须由空格、制表符和新行符分割。遇到逗号和分号等不是分隔符。例如:

scanf(“%d%d”,&r,&c) 。 将接受输入10 20,但遇到 10,20 则失败。

3:百分号(%)与格式符之间的星号(*)表示读指定类型的数据但不保存。例如:

scanf(“%d%*c%d”,&x,&y) 。对10/20的读入操作中,10放入变量x,20放入变量y。

4:格式命令可以说明最大域宽。 在百分号(%)与格式码之间的整数用于限制从对应域读入的最大字

符数。例如:scanf(“%20s”,&address): address 读入不多于 20 个字符,若达到最大域宽前已遇到空

白符,则对该域的读立即停止;此时,scanf() 跳到下一个域。

5:虽然空格、制表符和新行符都用做域分割符号,但读单字符操作中却按一般字符处理。例如:

scanf(“%c%c%c”,&a,&b,&c):对输入“x y”时,x在变量a中,空格在变量b中,y在变量c中。注意,

控制串中的其它字符,包括空格、制表符和新行符,用于从输入流中匹配并放弃字符作用。例如:

scanf(“%dt%d”,&x,&y): 对于输入10t20时,将把 10 和 20 分别放到 x 和 y 中,t 被放弃,因为 t 在

控制串中。

6:%s 表示读字符串,而 %d 表示读整数。格式串的处理顺序为从左到右,格式说明符逐一与变元表

中的变元匹配。

getchar()、gets()、scanf()函数区别:
读取字符时:

scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲中);

   getchar()以Enter结束输入,也不会舍弃最后的回车符;

读取字符串时:

 scanf()以Space、Enter、Tab结束一次输入,scanf()读取字符串会舍弃最后的回车符!

 gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

清空缓冲区的残留数据:使用函数fflush(stdin)。

getch与getchar函数的区别:
getchar():
1:从键盘读取一个字符并输出,该函数的返回值是输入第一个字符的ASCII码;若用户输入的是一连串字符,函数直到用户输入回车时结束,输入的字符连同回车一起存入键盘缓冲区。

2:使用的头文件#include<stdio.h>

getch():
1: 接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上。getch()函数常用于中途暂停程序方便调试和查看。

2:使用的头文件#include<conio.h>,其中该函数不是标准的函数,移植有时候会报错。解决方案:

方法1:项目->属性->配置属性->C/C+±>预处理器->预处理器定义->编辑中添加

“_CRT_SECURE_NO_DEPRECATE

_CRT_NONSTDC_NO_DEPRECATE”

方法2:更换函数

将getch()函数更换为_getch()函数即可
————————————————
版权声明:本文为CSDN博主「沐凡星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiangzun0155/article/details/114504067

### C语言中的`get`系列函数 在C语言中,与`get`相关的函数主要用于输入操作。这些函数通常用于从标准输入设备(通常是键盘)读取字符或字符串数据。以下是几个常见的`get`系列函数及其使用方法: #### 1. `getc()` 和 `fgetc()` 这两个函数的功能相同,都是用来从文件流中读取单个字符。当它们被应用于标准输入流 (`stdin`) 时,可以实现类似于其他`get`函数的效果。 - **语法**: ```c int getc(FILE *stream); int fgetc(FILE *stream); ``` - **返回值**:成功时返回下一个字符作为无符号字符转换后的整数;如果到达文件结束或者发生错误,则返回EOF[^2]。 #### 2. `getchar()` 这是最常用的获取单个字符的函数之一,专门针对标准输入流设计。 - **语法**: ```c int getchar(void); ``` - **功能**:从标准输入缓冲区读取一个字符并将其返回给调用者。如果没有更多可读的数据则会返回EOF[^1]。 #### 示例代码展示如何使用上述三个函数来接收用户的按键输入: ```c #include <stdio.h> int main(){ char ch; printf("请输入一个字母:"); // 使用getchar() ch = getchar(); putchar(ch); // 输出接收到的字符 return 0; } ``` #### 3. `gets()` (已废弃) 尽管曾经广泛使用,但由于存在安全风险,在现代编程实践中不推荐再继续采用此方式处理字符串输入。 - 替代方案建议改用更安全可靠的版本如fgets()替代原生危险型API接口——即gets()[^3]。 #### 4. `scanf("%c",&variable)` vs `getchar()` 两者都可以完成基本的任务需求但是也有细微差别需要注意区分对待适用场景不同选择合适工具很重要: | 特性 | scanf("%c") | getchar() | |-----------------|--------------------|---------------| | 功能 | 可指定格式化符 | 单纯抓取下一字节 | | 缓冲机制影响 | 需要额外考虑空白过滤行为 | 自动跳过前导空格直到遇到有效ASCII码为止 | ### 结论 对于简单的字符捕捉任务来说,`getchar()` 是非常简洁有效的解决方案;而对于复杂一些的情况比如涉及到了多字段解析的时候可能就需要借助于强大的`scanf`家族成员们上阵了。无论如何,请始终牢记安全性原则优先级最高!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值