首页 > 解决方案 > 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吗?

有人可以解释一下吗?

标签: c

解决方案


scanf肯定不会忽略空格!

%dscanf 格式不仅仅意味着“扫描和转换整数” ,是一个偶尔令人惊讶的事实。它的实际意思是“跳过任何空格,然后扫描并转换一个整数”。

所以你的 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


推荐阅读