【问题标题】:Printing leading zeros in a number in C [closed]在C中打印数字中的前导零[关闭]
【发布时间】:2018-08-18 21:32:16
【问题描述】:

我正在做一个项目,我希望我的程序能够读取一个前导零的严格 5 位数字。

如何打印包含前导零的数字?
另外:如何提供我的程序读取 5 位数字,包括作为前导数字的零?

【问题讨论】:

  • 给我们看一些代码
  • 你想如何在你的程序中输入数字?控制台还是通过文件?为您的计划提供背景信息。
  • 号码是什么类型的?整数?你能不能把它读成一个字符串并在之后验证/编号?
  • 你已经问了三个问题(第一个暗示)。请不要像在教程中一样问几个。如果在scanf 中使用格式说明符%d,则忽略前导零。如果您使用格式说明符%i,则前导零表示八进制值。
  • 如果您想准确输入 5 位数字,请使用字符串类型输入。关于“带前导零”的问题也不清楚,必须总是有前导零吗?请发布示例输入和所需的输出。

标签: c numbers digit leading-zero


【解决方案1】:

我假设你想读入int 变量。如果是这样,您可以尝试以下解决方案。

#include<stdio.h>
void main()
{
  int a;

  scanf("%5d", &a);
  printf("%05d",a);

}

【讨论】:

  • 这将接受 1 到 5 位数字(加符号)的输入。假设数字不是负数,它将打印带有前导零的值。
【解决方案2】:

控制输入的最佳方法是读入一个字符串,然后根据需要解析/分析该字符串。例如,如果“正好 5 位”的意思是:“正好 5 位(不少于,不多),除 '0' 外没有其他前导字符,并且没有负数”,那么您可以使用函数 strtol,它告诉你数字解析在哪里结束。从中,您可以得出输入实际有多少位:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    char line[50];
    if (fgets(line,50,stdin)) {
        if (isdigit((unsigned char)line[0])) {
            char* endptr = line;
            long number = strtol(line, &endptr, 10);
            int nrOfDigitsRead = (int)(endptr - line);
            if (nrOfDigitsRead != 5) {
                printf ("invalid number of digits, i.e. %d digits (but should be 5).\n", nrOfDigitsRead);
            } else {
                printf("number: %05lu\n", number);
            }
        }
        else {
            printf ("input does not start with a digit.\n");
        }
    }
}

【讨论】:

  • 正点。非常感谢。
【解决方案3】:

使用带有“%05d”的 printf 系列来打印带有前导零的数字。使用 sscanf 读取此值(忽略前导零)。

查阅以下代码:

int a = 25;
int b;
char buffer[6];
sprintf( buffer, "%05d", a );
printf( "buffer is <%s>\n", buffer );
sscanf( buffer, "%d", &b );
printf( "b is %d\n", b );

输出是:

缓冲区是

b 是 25

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2014-02-05
    • 2011-07-30
    • 2022-01-26
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多