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

#include<stdio.h>

int main()

{

int a,b,c;

scanf("%d%d",&a,&b);

c=a+b;

printf("%d",c);

return 0;

}

https://img2.mukewang.com/5c8128b50001f1c708270561.jpg

你存在我婶婶的脑海里
浏览 715回答 1
1回答

onemoo

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 两个变量中。
打开App,查看更多内容
随时随地看视频慕课网APP