【问题标题】:keeping leading zeros in C [duplicate]在C中保持前导零[重复]
【发布时间】:2013-06-20 05:19:30
【问题描述】:

我试图在 c 中打印一个整数,但是那些以零开头的整数导致了我的问题。 例如,如果没有。是 01234 它打印的是 1234 而不是 01234。请告诉如何在 C 中进行操作

我的问题是有 2 个整数,我想知道第一个整数是否在第二个的开头。

对于前- 123和
12345 “是”,因为 123(第一个整数)在第二个整数(12345)的开头

但万一 123和
012345 它应该打印“否”,因为 123 不是在 0123345 的开头,而是在 c 中的尾随零被删除,我的程序正在打印“是”

请告诉我该怎么做(注意,数字的位数可以在整数范围内变化,第二个整数等于或大于第一个整数)

【问题讨论】:

  • 您的标题具有误导性。它应该像“比较前面的零的数字”。
  • 如果您将数字作为字符串处理,您会做得更好。

标签: c


【解决方案1】:
int i = 1234;
printf("%08d", i);   // zero-pad to 8 places.

【讨论】:

  • 我只想保留用户没有输入的 0,最多 8 个地方
  • 你不能。将数字读入整数后,前导零(没有意义)就消失了。整数只存储数字。如果还有其他问题,那么您应该显示您正在使用的代码。
  • 响应速度+1 :)
  • 我想 52 秒还不错:-)
  • @himanshu 听起来你应该把你的号码读成一个字符串。
【解决方案2】:

我的建议是,如果您从用户那里获取来自 STDIN 的值。 然后,如果您想将该值用于打印目的,那么您需要将该带有前导零的整数存储到字符串而不是整数中。因为如果您将该字符串值存储在整数中,则前导零没有任何意义。

所以 printf 中的 %s 保留了用户以这种方式输入的零的数量。

【讨论】:

    【解决方案3】:
    #include <stdio.h>
    #include <string.h>
    
    #define N_DIGITS 64
    
    main()
    {
        char a[N_DIGITS], b[N_DIGITS];
        scanf("%s%s", a, b);
        if(strncmp(a, b, strlen(a))==0)
            puts("yes");
        else
            puts("no");
        return 0;
    }
    

    请注意,数字长度受值N_DIGITS 的限制。 结果如下;

    $ ./a.out <<<"123 12345"
    yes
    $ ./a.out <<<"123 012345"
    no
    

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 2017-03-11
      • 2018-04-12
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      相关资源
      最近更新 更多