1 回答
TA贡献883条经验 获得超454个赞
scanf 的第一个参数叫“格式化字符串”,必须按照这个格式来输入,scanf 才能正确地把输入的内容存到后面的变量中去。
你代码中 scanf 的格式化字符串指定的格式是"%d%d",这要求输入两个整型数值。
当然输入时必须用某种方式将两个数值分隔开,这样 scanf 才能知道你输入了两个内容——比如你想输入 12 和 34 两个数,如果你直接输入 1234,scanf 无从知道这到底算是输入了几个数。默认情况下,能在输入中起到分割作用的字符就是所谓的“空白字符”,即 回车、空格、tab 等。
所以你应该输入“7 空格 9”“7 回车 9”“7 tab 9”这样的才算正确。
逗号只是个普通字符,你输入的“7,9”与你的格式化字符串并不匹配,scanf 无法正确地识别你的输入,结果当然就错了。
反之,如果你在 scanf 中格式化字符串写的是 "%d,%d",那你就只能输入“7,9”了。输入“7 空格 9”什么的反而是错的了。
前面说如果实际输入内容中有的地方与 scanf 中格式化字符串不匹配,那么 scanf 就会中途识别失败,直接结束 scanf 的工作,继续执行后面的代码。
你的例子中由于错误地输入了逗号,导致 b 并未成功写入值。 看起来 b 之前也没有被适当初始化,所以 b 的值会是随机值,最后的结果也就不正确了。
如果继续扩展思考一下的话,你会觉得 scanf 中途识别失败竟然就若无其事地结束了工作——不管是不是成功地接收了所有的输入! 这样不就无法知道在运行时用户有没有正确输入了吗?
其实是有办法的(scanf 不是那么不负责的)。scanf 是有返回值的,它在执行后会返回“在识别时正确接收了的参数的个数”,程序员通过这个来判断是否正确识别了用户输入的所有内容、成功转换接收了全部变量。
你这里 scanf 返回 2 才证明 scanf 成功从你的输入中读取并存入了 a 和 b 两个变量中。
- 1 回答
- 0 关注
- 712 浏览
添加回答
举报