but1126 2024-07-22 22:25 采纳率: 100%
浏览 3
已结题

C语言有关scanf的问题

有关C语言scanf的问题
我今天第一天学习c语言,不要嘲笑我哈哈

img


如图代码,我在输入1,2后1_2自己就蹦出来了是怎么回事,按理说我应该输入“price 1 2"之后1_2才会出现不是吗?

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-22 22:25
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    从你提供的代码和描述来看,问题主要出在scanf函数的使用上。scanf函数根据提供的格式字符串来解析输入,如果格式字符串与输入的格式不匹配,scanf可能会以意想不到的方式工作。

    在你的代码中,有几个关键点需要注意:

    1. 格式字符串与输入的匹配scanf根据格式字符串中的空格、逗号等分隔符来解析输入。例如,scanf("%d %d", &a, &b);期望输入格式为两个由空格分隔的整数,而scanf("%d,%d", &a, &b);期望输入格式为两个由逗号分隔的整数。

    2. 错误处理scanf的返回值表示成功读取的项数。如果输入与期望格式不匹配,scanf可能不会读取任何项,或者只读取部分项。你应该检查scanf的返回值来确定输入是否正确。

    3. 输入缓冲区的处理:如果输入的格式不正确,scanf可能会留下未读取的字符在输入缓冲区中。这可能会影响后续的scanf调用。

    针对你的问题,即为什么输入1,2后程序会输出1_2,尽管你期望输入“price 1 2”后才出现这个结果,原因可能是:

    • 你的代码中第12行的scanf调用期望输入格式为price 1 2,但由于之前的scanf调用可能没有正确读取输入,导致输入缓冲区中残留了逗号,这使得第12行的scanf能够成功读取两个整数。

    • 第16行的scanf调用存在问题,格式字符串中的%dn是无效的,这可能是一个错误。正确的格式字符串应该是"%d %d",如果你想要读取两个整数。

    为了解决这个问题,你可以:

    • 确保每次scanf调用后检查其返回值,以确保输入正确。
    • scanf调用之间使用getchar()或其他方法清除输入缓冲区中的残留字符。
    • 修正第16行的scanf调用,使用正确的格式字符串。

    最后,关于你提到的编译器问题,scanf_sscanf的一个安全版本,它在某些编译器中是首选,因为它可以防止缓冲区溢出。如果你使用的是微软的编译器,可能需要使用scanf_s而不是scanf。但在这个上下文中,这不是导致问题的原因。

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月2日
  • 已采纳回答 9月2日
  • 创建了问题 7月22日

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆