【问题标题】:assignment supression and field width in scanfscanf中的分配抑制和字段宽度
【发布时间】:2021-10-23 10:45:15
【问题描述】:

在 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中

【问题讨论】:

    标签: c scanf


    【解决方案1】:

    你不能这样做。 scanfprintf 的工作方式不同。具体来说:

    • 格式字符串中的星号始终表示“禁止赋值”

    • 字段宽度必须在格式字符串中显示为文字;它们不能作为scanf的参数出现

    完整文档here

    【讨论】:

    • 我的失望是无法估量的,我的一天被毁了
    • @OsourceAll 加入俱乐部。 (唯一的救恩是让字段宽度恰到好处是一件复杂的事情,scanf 真的只在相对简单的程序中有用。如果你准备好让字段宽度恰到好处,希望你重新准备好继续寻找比scanf 更好的内容。)
    • 您可以即时构建格式字符串(也许使用sprintf)。它不必是字符串文字。
    • 是的,我想我必须使用 sprintf,谢谢
    猜你喜欢
    • 2017-11-05
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多