_NCY_ 发表于 2024-1-26 12:38:00

关于keil scanf底层调用的问题

用scanf时候偶然发现它不光要调用_getkey,怎么还要调putchar啊!!这个网上查的不一样啊。
      至于怎么发现的,是本人在用scanf获取字符串时,串口都会莫名其妙的把电脑发送的东西回显出来。仔细检查了主函数里根本没有printf之类的发送函数。最后尝试把putchar里放了个闪灯,每次调scanf时灯都会闪,同时把putchar里的发送注掉,就不再回显了。
       真奇怪,希望大佬给予指点

_NCY_ 发表于 2024-1-26 12:51:46

如图就是全部代码,每次调用sacnf输入的时候自带一个输出效果,这是为什么啊

LAOXU 发表于 2024-1-27 10:46:17

没什么为什么啊

早期的输入(键盘) 和 输出(显示器) 是分开的, 分别 接 SIO 输入和输出.

输入的 字符, 通过 SIO 串口 送至 CPU, 显示器 上并无显示, 只能通过 putchar 函数, 送 显示器 回显 .

kksk 发表于 2024-1-27 17:10:04

https://developer.arm.com/documentation/101655/0961/Cx51-User-s-Guide/Library-Reference/Reference/scanf
从Keil的文档来看,确实是调用了putchar的。
回显其实很常见,例如你使用Windows的cmd或其它命令行工具,你是能看到输入了什么命令的。如果去掉回显,那么你也看不见正在输入的指令。但是你使用stc-isp的串口工具,它也自带了回显功能,所以你会看到两遍指令。你如果使用了不自带回显的串口工具,那么就只能通过scanf带有的putchar来获取输入内容了。这就是调用putchar的用意。

_NCY_ 发表于 2024-1-28 09:13:42

话说这个回显能屏蔽掉吗?
如果不行就只能用自己的io了
页: [1]
查看完整版本: 关于keil scanf底层调用的问题