为了账号安全,请及时绑定邮箱和手机立即绑定

最简单的加法为什么错了?输入为什么是这样

最简单的加法为什么错了?输入为什么是这样

C
你存在我婶婶的脑海里 2019-03-07 22:20:54
#include<stdio.h>int main(){ int a,b,c; scanf("%d%d",&a,&b); c=a+b; printf("%d",c); return 0;}
查看完整描述

1 回答

已采纳
?
onemoo

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 两个变量中。

查看完整回答
反对 回复 2019-03-09
  • 1 回答
  • 0 关注
  • 712 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信