qq_74089332 2022-10-31 23:39 采纳率: 91.7%
浏览 69
已结题

C语言中scanf的问题(想半天了,还是想不通)

在scanf函数中,回车键不是代表,开始匹配,开始读取缓冲区中的数据吗?

img

img


这两张图,第一张图,我直接%d%d,结果这两个数据之间就可以用回车键分开。
第二张图,我用a=%db=%d。结果当我输入a=10以后按回车,它就直接开始读取缓冲区数据了!
为啥啊,为什么第一个图片,按回车,不会立刻开始运行scanf。而第二个图片,按回车直接开始运行scanf了。

img


这张图,当scanf函数里,加了一个\n,,无论怎么按回车,它都不会结束,必须要输入一个非空字符才能继续运行。
我看了很多解释,可还是不理解,我不知道,\n存入缓存区后,按回车,为啥不会开始运行scanf,而是永远不会结束。。
为什么输入一个非空字符,就结束了?是scanf函数匹配不成功,而强制退出了??

  • 写回答

4条回答 默认 最新

  • 三块不一样的石头 2022-11-01 00:11
    关注

    本人不是大佬,不懂编译的底层原理,就单纯说说自己的看法

    img


    img


    有此可见当输入与输入格式不相符时scanf强制结束了

    img


    img


    由此比较可知,scanf强制退出以后,输入依旧保存在缓存区,等待下一个scanf读入

    img


    img


    由此可见,你虽然敲了回车,但你的第一个scanf还处于执行的状态,而恰巧空字符串他又不做任何处理

    总结,能这样思考钻研确实是一件非常好的事情,但对于细枝末节的事情,以砸门的程度,不必过于最牛角尖,知道砸门用就行。

        printf("%d", printf("%d",20221101));
    

    又是新一月的开始,注意身体,早点休息~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了