【问题标题】:Can you define a minimum and maximum amount of digits to print from a digit in C?您可以定义从 C 中的数字打印的最小和最大数字数量吗?
【发布时间】:2018-11-05 11:18:14
【问题描述】:

例如,我想打印最多 8 位数字(零被截断)和最少 3 位数字(如果它小于它将用 0 填充)。像这样:

int x = 3;
printf("%max/min d", x)

会打印

003

int x = 1674;
printf("%max/min d", x)

会打印

1674

int x = 840683028573;
printf("%max/min d", x)

会打印

83028573

这个可以吗?

【问题讨论】:

  • 您对printf (and family) 格式化代码了解多少?你知道场宽吗?关于精度?你试过这些吗?如果这还不够,那么创建一个为您完成它的函数怎么样(可能通过直接截断或填充字符串缓冲区)?你在那里试过什么?效果如何?
  • @Someprogrammerdude 我明白你的意思,我不是描述性的。谢谢。

标签: c formatting printf


【解决方案1】:

你可以这样做:

printf("%03d", x % 100000000);

%03d 告诉printf 向左填充零,直到输出长度至少为 3 个字符。

另一部分比较简单,你最多从右边数8个?只看剩下的。

如果您的输入不适合整数,只需将int 替换为long long,然后将%03d 替换为%03lld,因为lldlong long int 的说明符(或只是ldlong int)。

所有这些都假设您的值始终严格为正(在这种情况下,您也可以使用unsigned 变量,其中说明符du 替换)。如果您的值已签名并且您希望最终输出长度为 8 个字符(包括减号),您可以简单地应用条件语句:

printf("%03d", (x < 0 ? x % 10000000 : x % 100000000));

【讨论】:

    【解决方案2】:

    您可以编写一个简单的函数来完成此操作:
    - 使用ceillog计算数字的位数
    - 使用long long int 存储值并执行算术以获得正确的结果
    - 使用正确的转换说明符%lld 打印值

    #include <stdio.h>
    #include <math.h>
    
    #define min_length  3
    #define max_length  8
    
    void PrintDigits(long long int x)
    {
        int noOfDigits = ceil(log10(x));
        if(noOfDigits < min_length)
            printf("%03lld\n", x % 1000000);
        else if (noOfDigits > max_length)
            printf("%lld\n", x % 100000000);
    
    }
    
    int main()
    {
    
       long long int x = 3;
       PrintDigits(x);
       x = 840683028573;
       PrintDigits(x);  
    
       return 0;
    }
    

    输出:

    003
    83028573
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 2020-07-20
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多