当前位置: 首页 > news >正文

一段代码带你理解输入缓冲区

本文将多次使用C语言中的scanf与getchar函数,带你充分理解输入缓冲区。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{

/*
int ch=getchar();
//从输入缓冲区获取一个字符,返回值类型是int
//错误输入时返回EOF(end of file)
putchar(ch);
//打印一个字符

int ch=0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
*/
int num=0;
char m ='\0';
printf("1.实现只打印数字字符\n");
printf("2.输入缓冲区示例\n");
scanf("%d",&num);
switch (num)
{
case 1:
getchar();//清理输入缓冲区
printf("功能1\n");

while ((m = getchar()) != '\n')
{
if (m < '0' || m>'9')
{
continue;
}
putchar(m);
}
break;
case 2:
getchar();
printf("功能2\n");

char password[20] = { 0 };
printf("password:");
scanf("%s", password);
//数组名本身就是一个地址;在输入缓冲区不读空格,\n
//getchar();//读取了输入缓冲区中的\n
int ch = 0;
while ((ch = getchar()) != '\n')
{
;
}//彻底清理输入缓冲区;只有空格前的内容被password保存
printf("please confirm Y/N:");
int ret = getchar();
if ('Y' == ret || 'y' == ret)
{
printf("yes");
}
else
{
printf("no");
}
//没写48行代码时为什么功能不实现?
//在scanf执行完后输入缓冲区余下\n,getchar不等待直接拿走并赋值给ret
//进if语句判断后直接输出no
break;
default:printf("无效输入");

}
return 0;

}

http://www.jsqmd.com/news/101582/

相关文章:

  • 人工智能在健康医疗软件中的应用
  • LobeChat多语言支持现状与国际化适配方案
  • BetterNCM插件:网易云音乐终极增强方案
  • 17、探索 Mozilla 的 XPCOM 对象
  • 3大实用技巧深度解析:BetterNCM安装器故障排查与性能优化指南
  • 5步搞定SillyTavern版本升级:告别烦恼的完整指南
  • 实验(三)
  • 16、深入了解Linux存储与设备管理
  • 18、Mozilla开发中的命名规范与模块化编程
  • 如何获取美股实时行情:Python 量化交易指南
  • PHP 常量
  • Chrome搜索替换插件终极指南:免费高效的网页文本批量处理神器
  • 15、深入探索Vim寄存器:复制粘贴的高级技巧
  • 基于C#的FTP客户端实现方案
  • 16、Vim 复制粘贴与宏操作技巧全解析
  • springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
  • Linux学习日记21:读写锁
  • ArcGIS中的字段类型
  • 《Ionic Select》深度解析:从入门到精通
  • 大数据领域数据仓库的流处理框架选型
  • RocketMQ 性能调优指南:Broker、Producer、Consumer 核心参数配置详解
  • 移动端AI绘图:iPhone上实现3秒内图像生成的完整技术方案
  • Windows文件资源管理器美化终极指南:5步实现Mica模糊效果
  • 9、Vim 中运行 shell 命令及文件管理全解析
  • 《C语言电子新-2026最新版》-编程语言与程序
  • 如何快速掌握视频转换工具:7个简单步骤从入门到精通
  • 10、Vim使用技巧:多文件管理与文件操作全解析
  • 如何避免MySQL死锁?资深DBA的9条黄金法则
  • C语言中实现Modbus转IEC 60870-5-103协议转换器
  • 如何快速上手VNote:从零开始的Markdown笔记体验