为啥这两个输出的结果不一样,这两个代码有什么不同吗?为什么第二个是16 0啊😫
因为,你压根不明白scanf 怎么用
scanf 里面不要出现多余的字符,除了%d、%f
我感觉你是想知道scanf的底层实现机制。函数scanf()是从标准输入流stdin中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式,是printf()的补函数。
例如:%s表示读字符串而%d表示读整数,格式串的处理顺序为从左到右,格式说明符逐一与变元表中的变元匹配。直到变元不匹配结束
简而言之就是:用scanf输入内容时,要严格按照双引号中的格式输入,只要类型不匹配,那么scanf函数的函数就会自动结束,并且不会修改对应的变量的值。也不会取走输入缓存区中保存。
按照你的例子来说,scanf第一次发现你输入的a(%c)的时候与scanf要求输入的(%d)类型不匹配,scanf直接结束,没有取你输入的任何内容,但是你printf又要得到结果,结果只能是a和b的初始值,而你一开始又没有给a和b设置初始值,所以里面一开始保存的是随机值,然后printf就直接读取一开始 a和b变量中的数据(随机值)。希望对你有所帮助
因为你输入格式的问题,输入格式由scanf决定
第一个scanf是a=%d,b=%d,那么输入一定要是a=某个数,b=某个数
第二个scanf是%d,%d,那么只需要输入数字,不要使用a=...,b=...
第二个你只要输入1,2。不能输入a=和b=,因为scanf中没写
你的输入必须跟输入格式匹配,否则输入不会成功。
要养成检查函数返回值的好习惯,来判断输入成功与否