【问题标题】:Printf formatting an integer to have a maximum and minimum of 2 digits displayedPrintf 格式化整数以显示最大和最小 2 位数字
【发布时间】:2019-02-27 03:20:36
【问题描述】:

在我的一项作业中,printf“我的朋友 __ 岁”需要一行,其中空格必须包含不超过也不少于 2 个整数的数字,但无论我尝试什么,什么都没有正在工作...

这是我的代码:

int age = 22332;

printf("My friend is %2.2i years old.",age);

但输出最终是

我的朋友今年 22332 岁。

我做错了什么?

【问题讨论】:

  • 你期望给定年龄的输出是什么?例如,您可以打印age % 100 以打印介于0099 之间的两位数字。不过,百岁老人对这种待遇感到不安。
  • 截取一个整数并不意味着什么。不是浮点数方面的精度控制

标签: c format printf


【解决方案1】:

对于%i格式说明符,小数点前的数字指定了最小字段宽度,即该值将占用的空格数,小数点后的数字是显示的最小位数,意思是如果太短,结果将用零填充。

显示的位数不能少于打印整数所需的位数。只有浮点类型才能显示更少的位数。

【讨论】:

  • 那么这是否意味着我无法限制 int 的最大输出位数,这意味着实验室要求的内容是不可能的?
  • @ChaseAllen 也许您应该将输入限制为 0 到 99 之间的数字。
  • 嗯,指令说使用 22 作为我的 int 值并格式化 printf 语句,以便只输出 2 位数字...我认为这意味着将其最小值和最大值限制为 2...你会建议我做什么? (我使用了一个大于 22 的不同 int 来测试我的格式是否正常工作,因此是 2232)
  • @ChaseAllen 您希望如何显示这样的值?
  • 它说输出应该是“我的朋友是 22 岁”,我可以做没有问题,但它说将 printf 格式化为仅显示 2 位数字让我感到困惑.. .
【解决方案2】:

如果你想控制最小位数输出,你可以使用像%.2d这样的长度说明符。但是,您可能不会限制输出的最大位数。

您可以做的是在调用之前限制 int 值:

#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif

printf("My friend is %.2d years old.\n", min(age, 99));

【讨论】:

    【解决方案3】:

    "%2.2i" 打印 最少 2 个字符1(第一个 2),根据需要使用空格填充,至少 2 个数字(第二个 @987654327 @)。

    要“至少有 2 位数字”,请使用 "%.2i"

    要“具有最多 ... 2 位数字”,请确保该值在 [-99...99] 范围内。例如,使用age % 100

    printf("My friend is %.2i years old.",age%100);
    

    99 岁以上的人Jeanne CalmentMethuselahImhotep 将打印截断的年份。@Jonathan Leffler


    1最少个字符”包括一个潜在的符号字符。

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2011-10-20
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2012-09-14
      相关资源
      最近更新 更多