首页 新闻 会员 周边 捐助

scanf("%d%d", &a, &b);这种为什么我输入12,不把1赋值给a,2赋值给b结束,而是空格或者回车等空白输入一个数字结束

0
[已关闭问题] 关闭于 2025-11-09 19:34

scanf("%d%d", &a, &b);这种为什么我输入12,不把1赋值给a,2赋值给b结束,而是空格或者回车等空白输入一个数字结束

_java_python的主页 _java_python | 小虾三级 | 园豆:1050
提问于:2025-11-09 19:24
<
分享
所有回答(1)
0

为什么 scanf("%d%d", &a, &b) 不会把 "12" 拆分成 1 和 2

1. %d 的解析规则

%d 会:

  • 连续读取数字字符直到遇到非数字字符

  • 将这一整串数字字符作为一个完整的整数解析

  • 遇到空白字符或文件结束时才完成一个 %d 的读取

// 输入 "12" 时:
scanf("%d%d", &a, &b); 等价于scanf("%d %d", &a, &b); 因为%d会自动默认跳过空白符,写上和不写空白都会匹配任意空白

如果没有指定分隔符,空白符默认是一个数字的分隔符

scanf("%d %d", &a, &b)这种可读性高,因为如果不知道%d会自动默认跳过空白符,这种加个空白符就可以很清楚了

// %d 会读取连续的数字字符 "12",将其解析为整数 12
// 然后赋值给 a
// 第二个 %d 还在等待输入,因为还没有遇到分隔符

scanf 需要某种方式知道一个数字在哪里结束,下一个数字在哪里开始:

c
// 正确的分隔方式:
输入 "12 34"    → a=12, b=34  // 空格分隔
输入 "12,34"    → a=12, b=34 // 逗号不是%d的默认分隔符
输入 "12\n34"   → a=12, b=34  // 换行符分隔
输入 "12\t34"   → a=12, b=34  // 制表符分隔

// 这些都会正确分隔:
"12 34" // 空格分隔
"12,34" // 如果用 "%d,%d" 格式
"12:34" // 如果用 "%d:%d" 格式
"12\n34" // 换行分隔

_java_python | 园豆:1050 (小虾三级) | 2025-11-09 19:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册