电脑c语言调用getchar用法

6532
回复
741739
查看
    [复制链接]
等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
34
威望
148
贡献
28
在线时间
3 小时
注册时间
2014-2-26

发表于 2024-7-15 09:50:54 | 显示全部楼层 |阅读模式
编程交流
编程交流: 大家在使用C语言调用函数时是不是不懂怎么使用呢?
电脑C语言当程序调用getchar.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止。下面就跟你们详细介绍下c语言中getchar的用法,希望对你们有用。
055e53ed6ce6dea5f648c0165ccb10be.jpeg
1.getchar
当输入终端在默认的输入模式(cooked)下时getchar是以行为单位进行存取,EOF(Unix/Linux下为组合键Ctrl+D)有两种作用,一个是换行符,一个是结束符。当缓冲区有其它字符时,它只是一个换行符,当前面没有字符是它就是一个地地道道的文件结束符。
Getchar这个函数执行过程
1.当调用getchar时,函数打开输入缓冲,并等待用户的输入。
2.用户进行输入,并结束输入(ctrl+D,回车),此时的ctrl+d只是一个结束这一次输入的动作,并不是EOF.
3.getchar从缓冲区里取一个字符,并返回.
4.缓冲区里字符队列头后移一位,等待再取。
5.回车结束和ctrl+d结束不相同,回车也做为一个字符被存到缓冲区里,而ctrl+d并没有做为一个字符存储。
6.缓冲队列没有字符,此时又按下了ctrl+d此时就是结束输入动作,也就是EOF
c语言中getchar的用法示例
while((c = getchar()) != EOF)
{
putchar(c);
}
执行程序并输入:test+”回车”。此时缓冲队列里就有”test+回车”,并开始返回一个字符”t”然后执行puchar(c)输出”t,接着回到while取出“e”并输出”e,反复执行直到取最后一个字符”回车”。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。如果想要结束程序执行必须在缓冲队列没有字符时输入EOF。要想正确理解这个问题 ,你就得记着linuxeverything is file。从终端的输入也相当于一个文件,终端输入有两种方式,一种raw一种是cooked的。也就是一个是原始输入,一个是带缓存的。默认的方式是cooked的,所以一定要等到一个换行才完成一个缓存,而开始文件的读取,你可以用stty raw,sty cooked来分别设置。
注意:
getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下
int c;
c = getchar();
2.改变终端的输入方式
static struct termios stored_settings;
void set_keypress(void) //设置终端为RAW模式,并关闭回显
{
struct termios new_settings;
cgetattr(0,&stored_settings);
new_settings = stored_settings;
/* Disable canonical mode, and set buffer size to 1 byte */
new_settings.c_lflag &= (~ICANON);
new_settings.c_lflag &= (~ECHO);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
return;
}
void reset_keypress(void) //恢复终端属性
{
tcsetattr(0,TCSANOW,&stored_settings);
return;
}
也可以用system(stty raw)
System(stty cooked).

欢迎加入学客联盟
等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
3956003
威望
128
贡献
128
在线时间
0 小时
注册时间
2021-4-8

发表于 2024-7-15 09:50:55 | 显示全部楼层
为终身学习做好准备
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
5005918
威望
105
贡献
105
在线时间
0 小时
注册时间
2022-3-16

发表于 2024-7-15 09:51:06 | 显示全部楼层
努力学习的人肯定会有用的
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
3996540
威望
141
贡献
141
在线时间
0 小时
注册时间
2021-5-2

发表于 2024-7-15 09:51:06 | 显示全部楼层
不经意已经在这里学习好多内容了
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4334733
威望
99
贡献
99
在线时间
0 小时
注册时间
2021-12-9

发表于 2024-7-15 09:51:17 | 显示全部楼层
好东西真心值得学习,还免费
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
6104285
威望
102
贡献
102
在线时间
0 小时
注册时间
2023-6-29

发表于 2024-7-15 09:51:29 | 显示全部楼层
最新的技术分享
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
5563711
威望
109
贡献
109
在线时间
0 小时
注册时间
2022-5-8

发表于 2024-7-15 09:51:41 | 显示全部楼层
不经意已经在这里学习好多内容了
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4993599
威望
113
贡献
113
在线时间
0 小时
注册时间
2022-3-15

发表于 2024-7-15 09:51:53 | 显示全部楼层
免费学习的好地方啊
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4946816
威望
114
贡献
114
在线时间
0 小时
注册时间
2022-3-8

发表于 2024-7-15 09:52:05 | 显示全部楼层
真心不怕苦,就怕学不到担心。
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
3844479
威望
124
贡献
124
在线时间
0 小时
注册时间
2020-1-1

发表于 2024-7-15 09:52:17 | 显示全部楼层
相信有位置在
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电脑技术交流学习
132-3591-5703
周一至周五 9:00-18:00
意见反馈:admin@cnxklm.com

扫一扫访问手机版

Powered by NST! X3.4© 2001-2021技术支持( 闽ICP备14006427号 闽公网安备35090202000370号)|意见建议