scanf 中的分配抑制和字段宽度
assignment supression and field width in scanf
在 printf 中,字段宽度可以指定为“*”
printf("%*s", 99, str);
如何在 scanf 中执行相同操作而不将其解释为赋值抑制字符?
示例 1:
char str[100];
scanf("%**s %s", 10, str);
第一个星号应该解释为赋值抑制,第二个星号应该解释为字段宽度,因此上面的scanf应该读取并忽略10个字符,然后读取下一个字符串并将其存储在str.
示例 2:
char str[100];
scanf("%*s", 10, str);
第一个星号应该被解释为字段宽度,所以上面的scanf应该读取10个字符并将它们存储在str
你不能这样做。 scanf
的工作方式与 printf
不同。具体来说:
格式字符串中的星号始终表示 'suppress the assignment'
字段宽度必须以文字形式出现在格式字符串中;它们不能作为 scanf
的参数出现
完整文档here。
在 printf 中,字段宽度可以指定为“*”
printf("%*s", 99, str);
如何在 scanf 中执行相同操作而不将其解释为赋值抑制字符?
示例 1:
char str[100];
scanf("%**s %s", 10, str);
第一个星号应该解释为赋值抑制,第二个星号应该解释为字段宽度,因此上面的scanf应该读取并忽略10个字符,然后读取下一个字符串并将其存储在str.
示例 2:
char str[100];
scanf("%*s", 10, str);
第一个星号应该被解释为字段宽度,所以上面的scanf应该读取10个字符并将它们存储在str
你不能这样做。 scanf
的工作方式与 printf
不同。具体来说:
格式字符串中的星号始终表示 'suppress the assignment'
字段宽度必须以文字形式出现在格式字符串中;它们不能作为
的参数出现scanf
完整文档here。