c - scanf - 多个整数
问题描述
在 c 中,当我为多个 int 输入输入时,scanf 如何知道将哪个数字存储在哪个变量中以及何时停止?
printf("Enter the numbers from 1 - 16 in any order: ");
scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k,&l,&m,&n,&o,&p);
当用户输入例如 -16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
它将 16 存储到变量 a,这就是我想要的。但是scanf如何知道16将存储到变量a而不是163。因为据我所知,scanf会忽略空白/空格,所以它不应该将所有数字存储到变量a吗?
有人可以解释一下吗?
解决方案
scanf
肯定不会忽略空格!
%d
scanf 格式不仅仅意味着“扫描和转换整数” ,这是一个偶尔令人惊讶的事实。它的实际意思是“跳过任何空格,然后扫描并转换一个整数”。
所以你的 scanf 格式
"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
相当于你可能认为你需要的
"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"
去做。
跳过的空格scanf
是任意的。它可以是空格、制表符、换行符和其他空白字符,并且可以有多个,任意组合。(对于格式说明符%d
自动执行的隐式空格跳过以及在格式字符串中包含任何空格字符(空白、制表符、换行符)时发生的显式空格跳过都是如此。)
scanf
大多数的输入说明符都会自动、隐式地跳过前导空格。但是有三个例外:,或说明符不跳过前导空格。%c
%[…]
%n
推荐阅读
- python - 创建满足以下先决条件的 Anaconda 环境
- android - 搜索栏没有显示缓冲辅助栏,当点击搜索栏时,视频视图没有跳到点击的位置
- python - pySerial - 更新太慢
- c++ - 有没有办法将 Lua 成员变量绑定为对该变量名称的 C/C++ 函数的调用
- c# - C#,日期时间转换
- java - 在 Spring sleuth (2.1.0) 中添加一个自定义 id 的 span
- javascript - 添加带有样式的materializecss芯片-如何获得样式?
- mysql - Go: sql RowsAffected with ON DUPLICATE KEY UPDATE
- python-3.x - 如何修复错误“命令“python setup.py egg_info”在 C:\Users\Dell\AppData\Local\Temp\pip-install-r1jk6xfr\pandas\ 中出现错误代码 1 失败?
- file - TagUI RPA 从浏览器下载文件