iistan 发表于 2022-9-9 11:36:25

关于scanf的小问题

代码如下:
#include <stdio.h>
int main()
{

int a,b,max;
printf("Input a,b:");
scanf("%d,%d",&a,&b);
if(a>b) max =a;
if(a<=b)max =b;
printf("max=%d\n",max);
return 0;

}
Q1:都输入20,15
%d,%d出现的是20
%d*%d出现的为什么是40
不太懂这个scanf的格式要求

人造人 发表于 2022-9-9 11:48:23

把代码写好

jackz007 发表于 2022-9-9 13:36:54

      这样写
scanf("%d%d" , & a , & b) ;
      键盘输入的时候,两个数中间用空格分隔

dolly_yos2 发表于 2022-9-9 13:51:03

本帖最后由 dolly_yos2 于 2022-9-9 13:59 编辑

这里当把两个 %d 之间的字符从 ',' 替换为 '*' 后输入字符串不变仍为 "20,15" ,则输入 a 后无法正确完成匹配( ',' 与 '*' 不对应), b 的值未被读入操作赋予,其值是不确定的,则最终得到的结果同样是不确定的,或者说是与其余外部因素相关的。

如果想比较彻底的了解 scanf 的格式要求可以把这一小节通读一遍
open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf#subsubsection.7.21.6.2
这大概是能够找到的最详尽的资料了

两手空空儿 发表于 2022-9-9 16:00:40

Q1:都输入20,15
%d,%d出现的是20
%d*%d出现的为什么是40

楼上的解释是对的,你这两个代码,第一个能正常读取到20和15,第二个可以读到a=20,不能获取到15,b的值一个随机数,你说这个40是什么意思?
页: [1]
查看完整版本: 关于scanf的小问题