Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言getchar的用法_getchar的用法

C语言getchar的用法_getchar的用法

作者头像
全栈程序员站长
发布于 2022-11-02 07:42:50
发布于 2022-11-02 07:42:50
1.7K00
代码可运行
举报
运行总次数:0
代码可运行
  • getchar

getchar的定义

MSDN中的解释是从流中读取一个字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int ch = getchar()
//通过getchar获取字符的ASCII码值传到ch里面存储

这里注意:getchar获取字符以后 通过ASCII码值的形式存储在ch里 为什么不用char ch?

getchar读到的是一个int类型的数据 好处是返回值的时候非常方便

接下来我们再看一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{ 
   
    int ch = 0;
    while ((ch = getchar()) != EOF)  
    //这句话的意思是读到了一个正常的字符
    { 
   
        putchar(ch);//给啥打印啥
    }
    return 0;
}

什么是EOF?

EOF是文件结束的标志,系统定义为-1,返回失败和错误的时候都会返回-1

当我们执行以上程序,会一直读取字符并且换行,以下做出解释: 1、为什么会自动换行? 当我们在键盘上敲入a的时候,getchar并没有获取,而是在我们敲回车以后才会进行读取 这个时候我们输入的其实是两个字符 一个是’a’,另一个是’\n’ 2、如何中止这个程序? 输入Ctrl+Z进行中止,这个时候我们的输入会有EOF的标志 3、当我们进行输入的时候,真实的情况是什么样的? 当我们输入的时候并不是键盘直接到getchar,而是中间有一个输入缓冲区,getchar一直在等待缓冲区里的内容,正是有了缓冲区的存在,才会出现有1的问题 4、我们如何清空缓冲区以免对后续操作造成影响呢? 我们作出以下研讨:

情景模拟:我们需要设计一个简易的登录验证密码过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{ 

//假设密码是一个字符串
char password[20] = { 
 0 };
printf("请输入密码:>");
scanf("%s", password);//abc
printf("请确认密码(Y/N):>");
int ret = getchar();
if ('Y' == ret)
{ 

printf("Yes\n");
}
else
{ 

printf("No\n");
}
return 0;
}
//当我们输入密码以后,并没有出现我们意料中的确认密码输入Y或者N的情况
//这个时候就是缓冲区出现问题

解释:假设密码为abc 程序没能按想象的那样输入Y或者N 是因为 scanf只读取abc不会读取\n getchar最后拿到的是Y和\n或者N和\n

我们对代码进行改进:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{ 

//假设密码是一个字符串
char password[20] = { 
 0 };
printf("请输入密码:>");
scanf("%s", password);//abc
getchar();//读取了\n
printf("请确认密码(Y/N):>");
int ret = getchar();
if ('Y' == ret)
{ 

printf("Yes\n");
}
else
{ 

printf("No\n");
}
return 0;
}
//再次运行一次,输入abc def

表面上看 我们输入abc的时候确实成功跑起来了 但是治标不治本 我们输入abc def的时候 getchar读到空格就不读了 第二次getchar拿到的是空格 还剩def\n 多一个空格 程序又出错了 所以这个时候我们需要用到刚刚的代码,进行稍微的修改可以很好的清空缓冲区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{ 

//假设密码是一个字符串
char password[20] = { 
 0 };
printf("请输入密码:>");
scanf("%s", password);//abc def 
//scanf的特性是只读到空格的地方就停止
int ch = 0;
while ((ch = getchar() != '\n'))
{ 

;
}
getchar();//读取了\n
printf("请确认密码(Y/N):>");
//这个时候缓冲区就只有Y或者N
int ret = getchar();
if ('Y' == ret)
{ 

printf("Yes\n");
}
else
{ 

printf("No\n");
}
return 0;
} 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180360.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C语言】getchar 函数的正确使用
也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
全栈程序员站长
2022/11/02
2K0
【C语言】getchar 函数的正确使用
【C语言】getchar()函数缓冲区
目录 前言😄 gethcar()函数的介绍🔥 缓冲区 结束语 ---- ---- ✨专栏:《C语言从0到1》 ✨送给各位的一句话:种一棵树最好的时间是十年前,其次是现在 ✨说明:无论如何,当我们下定决心的时候,那就是来得及的,你只管努力,剩下的交给天意! ---- 前言😄 大家好啊,由于之前有关C语言的博客写的比较少,不够详细,加之较少的时间写博客,但是我会尽己所能,把每一篇博客写好,帮助自己复习的同时,我也希望能够帮助到大家,让我们一起努力学习吧。接下去,我会陆续更新并且完善关于专栏《C语言
平凡的人1
2022/11/15
1.3K0
【C语言】getchar()函数缓冲区
【C语言初阶篇】scanf和getchar中缓存区的概念!
🎬 鸽芷咕:个人主页 🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》
鸽芷咕
2023/12/25
3800
【C语言初阶篇】scanf和getchar中缓存区的概念!
c语言中putchar的用法举例_putchar和getchar
getchar() 和 putchar() 是一对字符输入/输出函数. getchar()不带任何参数,他从输入序列中返回下一个字符。例如,下面的语句读取下一个字符输入,并把该字符的值赋给变量ch:
全栈程序员站长
2022/11/02
1.2K0
5. 很“迷”的字符与字符串
最近一直在为自己的浏览量而担忧啦,都快被厂长大人约谈了……我真的有尽力在写稿子哦,所以也请各位老铁,如果觉得我的文章还不错就转发到朋友圈或者微信群之类的,让更多人的和我们一起学C语言。
谭庆波
2018/10/18
1.3K0
5. 很“迷”的字符与字符串
C语言 getchar()原理及易错点解析
这个问题转载自n_s_X14,但是作者在文章最后留了一个问题,现在在这里给大家解释一下原因。
全栈程序员站长
2022/11/02
1.5K0
C语言 getchar()原理及易错点解析
C语言-文件操作这一篇足够
上篇博客中我们写了通讯录的实现,但会有一个问题困扰着我们,就是说当这个程序结束之后,信息便也就丢失了,没有进行保存,这也不是我们想要的一个结果,我们希望在程序执行结束之后,下次再执行时,用户信息仍然在里面,这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据 库等方式。今天呢,我们就通过这篇博客来介绍文件操作的内容,把数据存储到磁盘文件当中去。
HABuo
2024/11/19
1100
C语言-文件操作这一篇足够
c语言getchar()的用法_c=getchar()
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读取错误,则返回 EOF(-1)。所以 getchar() 函数返回值要用 int 整型变量来存储
全栈程序员站长
2022/11/02
8.3K0
c语言getchar()的用法_c=getchar()
初识C语言·文件操作
在电脑中文件是随处可见的,那你思考过为什么存在“文件”吗?当我们运行程序的时候,程序一旦结束,在内存中存储的数据也会被销毁,我们如果想要保存数据,以方便下一次使用的话,就需要用到文件,也就是说,文件是可以用来保存数据的。
_lazy
2024/10/16
990
初识C语言·文件操作
gets 、getchar 、fgets 、scanf的用法
https://www.cnblogs.com/-lyric/p/5118666.html
嵌入式与Linux那些事
2021/05/20
3.7K0
【C语言】分支语句与循环语句
if与else if的使用,if与else if使用时,如果if执行else if就不会执行。
YoungMLet
2024/03/01
1880
C语言中从键盘输入字符串时的一些问题[通俗易懂]
scanf()在输入字符串时有很大的弊端, 例如: 1). scanf()在从键盘读入字符时并不会根据所定义的字符数组的大小来控制读入多少个 , 而是从scanf( ) 中传入的地址开始一直访问下一个元素的内存 , 碰见空格符或者回车符时才停止读入并存入结束符’\0’ , 这就有可能造成了一个在C中非常严重的问题 , 访问非法内存 . 如果所输字符数量大于字符数组的长度 , 当scanf()将把字符存入字符数组的最后一个元素后 , scanf()还会继续往后访问内存 , 将接收的字符继续存入 , 但之后的内存是我们未申请的非法内存 , 会发生未知错误 , 例如以下代码: 2). 第二点也就是第一点中的遇到空格符停止读入并存入结束符’\0’, 也就是说scanf()存不了空格符
全栈程序员站长
2022/11/16
1.9K0
C语言中从键盘输入字符串时的一些问题[通俗易懂]
【C语言】题集 of ⑤
🚀write in front🚀   📝个人主页:打打酱油desu_泽En_CSDN博客 🆔本文由 泽En 原创 CSDN首发🐒 如需转载还请通知⚠ 🏅2021年度博客之星物联网与嵌入式开发TOP5→作者周榜56→总排名3255🏅  🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【C】题目_打打酱油desu-CSDN博客 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 ♐  目录 🚀write
謓泽
2022/12/12
6370
【C语言】题集 of ⑤
c语言中putchar的用法举例_c语言getchar和gets
当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D)
全栈程序员站长
2022/11/07
1.2K0
c语言中putchar的用法举例_c语言getchar和gets
c语言getchar()的用法_c语言getchar的功能
getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。
全栈程序员站长
2022/11/02
5.6K0
解决带空格的字符串输入问题:C/C++中的几种常用函数
在C/C++编程中,读取带空格的字符串一直是一个常见的问题。传统的 scanf 和 gets 函数在处理带空格字符串时往往会遇到一些限制和问题。为了更加安全地处理带空格的字符串输入,我们可以选择不同的方法,本文将详细介绍几种常用的解决方案,并展示它们的优缺点。
平凡之路.
2025/02/05
4930
getchar的使用方法_c语言strlen函数用法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
5600
getchar的使用方法_c语言strlen函数用法
C语言入门(循环和分支语句、goto语句)
比如:输入1,打印星期一;输入2,打印星期二……输入7,打印星期天。这种如果用if...else if...else的形式就过于复杂了,这种类型就适用于switch语句。
see.
2024/06/04
1880
C语言入门(循环和分支语句、goto语句)
linux中getchar函数用法,linux getchar函数使用
printf(“\nThe string length is %d\n”, num);
全栈程序员站长
2022/11/02
3.3K0
linux中getchar函数用法,linux getchar函数使用
[c语言日寄]数据输入
在C语言的世界里,数据输入是程序与用户交互的重要环节。无论是简单的计算器程序,还是复杂的系统软件,都需要从用户那里获取数据,然后进行处理和输出。今天,我们就通过一个简单的程序来深入探讨数据输入的实现方法、相关知识点以及一些拓展应用。
siy2333
2025/03/24
1790
相关推荐
【C语言】getchar 函数的正确使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验