微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以向我解释模字符如何输出前导零

如何解决有人可以向我解释模字符如何输出前导零

这是原来的问题: 创建一个函数显示 00 之间所有不同的两位数字组合 和 99,按升序排列。

这是一个同学做的。它编译。所以所有的第一个个位数输出都必须有一个前导零。我不明白他是怎么做到的。有人可以向我解释这个 a%10 +0 部分以及它是如何打印前导零的吗?提前致谢。

 void   ft_print_comb2(void)
 {
int x;
int y;
enter code here
x = 0;
while (x < 99)
{
    y = x + 1;
    while (y < 100)
    {
        output_format(x,y);
        printlines(x,y);
        y++;
    }
    x++;
    }
}

void    output_format(int x,int y)
{
 if (!((x == 99 && y == 99) || (x == 0 && y == 1)))
 {
    write(1,",2);
    }
}

void    printlines(int x,int y)
{
char xmodule;
char xdiv;
char ymodule;
char ydiv;

xmodule = (x % 10 + '0');
xdiv = (x / 10 + '0');
ymodule = (y % 10 + '0');
ydiv = (y / 10 + '0');
write(1,&xdiv,1);
write(1,&xmodule," ",&ydiv,&ymodule,1);
}

解决方法

对于 0 到 100 之间的数字,x%10 + '0'x 最低位的 ASCII 值,x/10 + '0' 是十位(或 0如果数量小于 10)。 '0' 是代表字符 0 的 ASCII 值,x%10x 除以 10 的余数。这是你朋友的代码使用的技巧。

[脚注 1](或更准确地说,来自执行环境字符集的字符代码,可能是也可能不是 ASCII)。

但是,编写的代码相当复杂,输出的格式化数字(包括前导零)由标准库提供。可以使用 for 循环方便地描述介于两个数字之间的循环。程序使用的函数 write 是 POSIX,而不是 C 标准库的一部分。

这是使用 printf 的完整版本:

#include <stdio.h>

int main(int argc,char *argv[]) {
    for (int x = 0; x < 100; x++) {
        for (int y = x+1; y < 100; y++) {
            if (y!=1) printf(","); // skip comma for the first pair output.
            printf("%02d %02d",x,y);
        }
    }
    printf("\n");
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。