0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

putchar()函数详解

麦辣鸡腿堡 来源:CSDN博客 作者:Jambo! 2023-01-22 16:59 次阅读

实例

1.清空缓冲区

下面一段把代码是输入一段密码,并且还要用getchar()接受是否确认密码的选项:

int main()

{

char password[20] = { 0 };

int ch = 0;

printf("输入密码\\n");

scanf("%s", password);

printf("请确认密码(Y/N):");

ch = getchar();

if (ch == 'Y')

{

printf("成功\\n");

}

else

{

printf("失败\\n");

}

return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

我们输入一端密码后,还未输入Y或N,代码就自动打印“失败”并退出运行

这其实还是scamf无法读取回车在作祟

当我们输入1234567后,此时在输入缓冲区中其实存的是:1234567\\n

scanf("%s", password);语句读取字符串,因为它无法读取\\n所以此时scanf只会读取走1234567,在输入缓冲区中还有\\n

所以在之后的ch = getchar();中,就会读取\\n,不等于Y,所以会打印失败

所以,要把缓冲中的 \\n 消化掉,也就是清空缓冲区

只要,再写一个getchar()语句,将\\n读取走,就可以了

代码如下:

int main()

{

char password[20] = { 0 };

int ch = 0;

printf("输入密码\\n");

scanf("%s", password);

printf("请确认密码(Y/N):");

getchar(); //清空缓冲区

ch = getchar();

if (ch == 'Y')

{

printf("成功\\n");

}

else

{

printf("失败\\n");

}

return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

运行成功

image.png

2.字符串中有空格

以下代码是输入一个字符串再输出:

int main()

{

char str[20] = { 0 };

scanf("%s", str);

printf("%s", str);

return 0;

}

1

2

3

4

5

6

7

如果输入的字符串是连续的,也就是没有空格的,此代码正常运行

如果输入的字符串是有字符的,就会出现错误

image.png

错误的原因还是scanf无法读取缓冲区中的空格,所以接下来要使用getchar去读取字符串

因为输入的一段字符串一定会是以\\n为结尾

所以在前面的while ((ch = getchar()) != 'EOF)改成while ((ch = getchar()) != '\\n')即可,只要不遇到\\n就一直读取下去

代码如下:

int main()

{

char str[20] = { 0 };

char ch = 0;

while ((ch = getchar()) != '\\n')

{

putchar(ch);

}

return 0;

}

1

2

3

4

5

6

7

8

9

10

运行结果:

image.png

原文链接:https://blog.csdn.net/weixin_64116522/article/details/127956631

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4317

    浏览量

    62488
  • 代码
    +关注

    关注

    30

    文章

    4762

    浏览量

    68409
收藏 人收藏

    评论

    相关推荐

    STM32CubeIde生成的工程,使用printf函数没有调用_write和__io_putchar函数,为什么?

    (int ch) 函数,发现没有串口没有输出,使用SWD进行debug,并对syscalls.c中的_write函数以及重写的io_putchar函数打了断点,结果printf执行后,
    发表于 05-24 06:13

    重定向了fputc及putchar函数,但printf没有输出,为什么?

    重定向了fputc及putchar函数,但printf没有输出 删除了drivers/drv_uart.c drv_uart.h 删除了文件rt-thread\\components
    发表于 07-18 07:44

    是否可以在调试模式下使用''printf''或''putchar''函数

    大家好, 关于ST VD和STM8的一个小问题。是否可以在调试模式下使用''printf''或''putchar''函数在控制台中显示消息或类似的东西? (我的意思是不使用USART) 我
    发表于 12-06 16:16

    printf/fputc/putchar和vsprintf怎么使用?

    printf/fputc/putchar和vsprintf怎么使用?
    发表于 12-02 06:09

    PICC库函数详解

    PICC库函数详解
    发表于 04-18 20:13 132次下载

    Android开发手册—API函数详解

    Android开发手册—API函数详解
    发表于 10-17 09:01 13次下载
    Android开发手册—API<b class='flag-5'>函数</b><b class='flag-5'>详解</b>

    基于Android开发手册—API函数详解

    基于Android开发手册—API函数详解
    发表于 10-24 09:06 18次下载
    基于Android开发手册—API<b class='flag-5'>函数</b><b class='flag-5'>详解</b>

    浅谈keil中库函数和寄存器关系

    在一个芯片系统里,uart的驱动是厂商自己写好的,那他们是怎么关联printf到uart的呢?有人说,printf最终是调用了putchar,我搜索了源码,没有这个函数,估计是开发工具,像KeilC
    发表于 06-22 08:19 2953次阅读
    浅谈keil中库<b class='flag-5'>函数</b>和寄存器关系

    网络函数的习题与详解详细说明

    本文档的主要内容详细介绍的是网络函数的习题与详解详细说明。
    发表于 09-28 08:00 0次下载
    网络<b class='flag-5'>函数</b>的习题与<b class='flag-5'>详解</b>详细说明

    Linux内核GPIO操作函数详解分析

    本文档的主要内容详细介绍的是Linux内核GPIO操作函数详解分析免费下载。
    发表于 01-22 16:58 28次下载

    Android开发手册API函数详解资料免费下载

    本文档的主要内容详细介绍的是Android开发手册API函数详解资料免费下载。
    发表于 02-22 08:00 0次下载

    51单片机(STC15W408AS)映射printf函数 串口收发实现

    前提:实现串口收发数据/************************************************* *函数名称:char putchar(char c
    发表于 11-20 17:51 8次下载
    51单片机(STC15W408AS)映射printf<b class='flag-5'>函数</b> 串口收发实现

    如何使用printf函数将字符串打印到串口

    如何使用printf函数将字符串打印到串口该函数名已经在标准输入输出库头文 件 stdio.h 中定义,原型为 int fputc(int ch, FILE *f)。在usart.c中添加
    发表于 01-12 18:53 1次下载
    如何使用printf<b class='flag-5'>函数</b>将字符串打印到串口

    C语言putchar函数介绍

    想从计算机向显示器输出一个字符,可以调用系统函数库中的putchar函数
    的头像 发表于 03-09 11:02 3972次阅读

    STM32库函数SystemInit()详解

    STM32库函数SystemInit()详解
    的头像 发表于 09-18 15:45 3896次阅读
    STM32库<b class='flag-5'>函数</b>SystemInit()<b class='flag-5'>详解</b>