问题描述
这是原来的问题: 创建一个函数,显示 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%10
是 x
除以 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;
}