当前位置:网站首页>帶你輕松玩轉C語言scanf和getchar
帶你輕松玩轉C語言scanf和getchar
2022-04-21 14:04:00 【頭發沒有代碼多】
目錄
getchar()
getchar()返回類型和如何結束

getchar()是從鍵盤上接收一個字符,它的返回值為int型,它也可以接收字符型,因為字符型在C語言中是以ASCII碼值的形式進行存儲的。

當讀取到錯誤或讀到文件結束標志EOF時,getchar()會停止獲取字符

getchar獲得一個字符,賦給ch,putchar是將這個字符輸出,printf也是將這個字符輸出
getchar如何獲取字符

工作原理: 當我們在鍵盤上輸入字符後,按下回車鍵,此時我們輸入的字符會被送到緩存區,由於我們按了回車鍵,緩存區會自動加入一個\n,即換行符,此時緩存區的內容時輸入的字符+換行符,getchar會從緩存區中一個一個把字符往出拿,知道拿光比特置,因為最後一個是換行符,當getchar拿完字符之後再拿換行符,此時會進行換行。

如這樣:在ch獲得字符後,它會自動換行,就是因為我們使用了回車鍵,使得它在緩存區中多了一個換行符,所以在ch接收完字符後會自動換行
getchar()如何停止獲取字符
當讀取到錯誤或讀到文件結束標志EOF時,getchar()會停止獲取字符,除過getchar()自動停下,還有一種方法按ctrl+z,有的設備按一次就行,有的需要按好幾次

像這種代碼,光標會一直閃爍,就代錶程序一直在執行,當我們按下ctrl+z再按回車之後,這個時候光標不再閃爍,說明程序停止執行

scanf()
scanf()返回類型和如何結束

返回類型為int型,scanf()返回的值為,正確的獲得按格式所輸入的字符的個數(一般編譯器會將scanf返回值忽略),但是這個不影響我們使用scanf(),scanf()我們拿來從鍵盤給變量賦值就行,scanf返回成功轉換和分配的字段數;返回值不包括已讀取但未分配的字段。返回值為0錶示未分配任何字段。如果出現錯誤,或者在首次嘗試讀取字符時遇到文件結尾字符或字符串結尾字符,則返回值為EOF

scanf()如何獲取字符

工作原理: 當我們在鍵盤上輸入字符後,按下回車鍵,此時我們輸入的字符會被送到緩存區,由於我們按了回車鍵,緩存區會自動加入一個\n,即換行符,此時緩存區的內容時輸入的字符+換行符,scanf會從緩存區按所要求的格式把字符往出拿,直到拿光為止,因為最後一個是換行符,當scanf()拿完字符之後再拿換行符,此時會進行換行。
用scanf()從鍵盤上給變量賦值

這裏我們按""裏面的格式輸入字符就行,這裏是%d,所以我們輸入整數,由於按了回車鍵,所以它會進行自動換行
用scanf和getchar設置密碼鎖
當我們輸入123456之後按下回車,並沒有輸入Y,此時就顯示NO,說明getchar()接受了一個字符不是Y,getcahr()在這裏接收的是\n因為我們輸入完密碼後按了回車鍵,緩存區自動加了一個\n,而scanf按格式讀取只讀到了6,之後出現了一個getchar(),getchar()會自動把緩存區裏的\n拿走

為了解决這種情况,我們加一個getcahr()來獲取末尾的\n ,此時打印正常
但當輸入密碼中有空格時候,此時又出現跟前面一樣的錯誤,這是因為scanf()只讀走了abcdef讀到空格的時候scanf停止讀取,而第一個getchar接收到了空格,ret接收到了1,所以會發生錯誤

為了避免這種情况,我們稍加修改,加一個while循環,當它讀取到的字符是\n時,自動跳出循環

版权声明
本文为[頭發沒有代碼多]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204211352335947.html
边栏推荐
- MySQL主从同步-多实例
- 多线程之死锁用例
- < 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (9)
- 集合线程安全
- C语言分支和循环语句
- Ssh server -- key authentication
- < 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (10)
- socket做的简单网络嗅探器
- < 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (III)
- stm32的内存分布
猜你喜欢

The stack concept is transformed into cyclic bracket matching inverse Polish expression simulation to achieve full dry goods

web课程设计-照片记录网站(Flask)

tcpdump抓包与nmap简单使用

NFS service, LVM capacity expansion

Zabbix5 series - creating auto discovery templates (XVI)

ftp服务

Zabbix5 series - monitoring HP server ILO management port (6)

stm32的内存分布

园区网架构

Zabbix5系列-监控惠普服务器iLO管理口 (六)
随机推荐
centos 卸载mysql
ForkJoin
Zabbix5系列-监控华为、H3C交换机(snmpv2c/snmpv3/snmptrap) (二)
终止线程使用interrupt
MySQL configures PXC high availability cluster
MySQL read / write separation server -- maxscale service
网络模块知识点总结
ceph多monitor实现高可用
CognitiveComputationalNeuroscienceonlineReadingClub第三季成员招募
Emergency response notes
手把手教你使用rand函数实现猜数字游戏
The importance of computing edge in Networkx: edge intermediate number or intermediate centrality edge_ betweenness
如何在机房限制学生端摆脱老师的控制,实现自由上网
mysql数据备份管理
STL的学习
pytorch机器学习之numpy基础
软件测试常见问题 开发模型 PC端qq登录测试用例 BUG的相关问题 测试用例设计的常用方法
Zabbix5 series - access to grafana panel (XVII)
How does redis query a key from massive data?
CEPH maintenance command understanding
