首页 文章

在C中打印0?

提问于
浏览
284

我正在努力寻找一种打印领先0的好方法,比如01001的邮政编码 . 虽然数字将存储为1001,但这样做的好方法是什么?

我想过要么使用case case语句/如果那么弄清楚这个数字是多少位数,然后把它转换成一个带有额外0的打印的char数组,但我不禁想到有可能有办法用printf格式语法,这是我的意思 .

10 回答

  • 7

    如果你在* NIX机器上:

    man 3 printf
    

    这将显示一个手册页,类似于:

    0该值应为零填充 . 对于d,i,o,u,x,X,a,A,e,E,f,F,g和G转换,转换后的值在左侧用零填充而不是空白 . 如果出现0和 - 标志,则忽略0标志 . 如果使用数字转换(d,i,o,u,x和X)给出精度,则忽略0标志 . 对于其他转换,行为未定义 .

    即使问题是C,this页面可能有帮助 .

  • 148

    更灵活..这是打印具有固定宽度和空间填充的右对齐数字行的示例 .

    //---- Header
    std::string getFmt ( int wid, long val )
    {  
      char buf[64];
      sprintf ( buf, "% *ld", wid, val );
      return buf;
    }
    #define FMT (getFmt(8,x).c_str())
    
    //---- Put to use
    printf ( "      COUNT     USED     FREE\n" );
    printf ( "A: %s %s %s\n", FMT(C[0]), FMT(U[0]), FMT(F[0]) );
    printf ( "B: %s %s %s\n", FMT(C[1]), FMT(U[1]), FMT(F[1]) );
    printf ( "C: %s %s %s\n", FMT(C[2]), FMT(U[2]), FMT(F[2]) );
    
    //-------- Output
          COUNT     USED     FREE
    A:      354   148523     3283
    B: 54138259 12392759   200391
    C:    91239     3281    61423
    

    设计函数和宏使printfs更具可读性 .

  • 0

    Zipcode是一个高度本地化的领域,许多国家的邮政编码都有字符,例如英国,加拿大 . 因此,在此示例中,您应该使用字符串/ varchar字段来存储它,如果您在任何时候发货或从其他国家/地区获取用户/客户/客户/等 .

    但是在一般情况下,您应该使用建议的答案( printf("%05d", number); ) .

  • 492

    printf允许各种格式化选项 .

    例如:

    printf("leading zeros %05d", 123);
    
  • 16

    如果您需要将zipcode存储在字符数组zipcode []中,您可以使用:

    snprintf( zipcode, 6, "%05.5d", atoi(zipcode));
    
  • 43
    printf("%05d", zipCode);
    
  • 14

    在最小字段宽度之前放置零:

    printf("%05d",zipcode);
    
  • 0
    sprintf(mystring, "%05d", myInt);
    

    这里,“05”表示“使用带有前导零的5位数字” .

  • 13

    如果您将邮政编码存储为字符串,那么您将为自己省去一堆麻烦(长期),而不是数字,而不是数字 .

  • 3

    正确的解决方案是将邮政编码作为STRING存储在数据库中 . 尽管它可能看起来像一个数字,但事实并非如此 . 这是一个代码,每个部分都有意义 .

    数字是你算术的东西 . 邮政编码不是 .

相关问题