读书人

这是一个输出二进制的程序为什么最后

发布时间: 2012-09-11 10:49:03 作者: rapoo

这是一个输出二进制的程序,为什么最后putchar('0' + r)语句中去掉‘0’+后,只写为putchar(r)程序就不行了呢?
/* binary.c -- prints integer in binary form */
#include <stdio.h>
void to_binary(unsigned long n);

int main(void)
{
unsigned long number;
printf("Enter an integer (q to quit):\n");
while (scanf("%ul", &number) == 1)
{
printf("Binary equivalent: ");
to_binary(number);
putchar('\n');
printf("Enter an integer (q to quit):\n");
}
printf("Done.\n");

return 0;
}

void to_binary(unsigned long n) /* recursive function */
{
int r;

r = n % 2;
if (n >= 2)
to_binary(n / 2);
putchar('0' + r);

return;
}


[解决办法]
'0' + r实际上是在计算ascii码
[解决办法]
putchar是输出字符,r是int,当然不行啊!当r=0是,它输出的其实是ascii码中的第一个。
写成putchar(r+48)也行。
[解决办法]

探讨
putchar('0' + r)的意思是把r转换为数字字符,而putchar(r)只是把r当成ASCII码打印,ASCII码0和1打印出来是看不懂的符号。

[解决办法]
探讨

引用:
putchar是输出字符,r是int,当然不行啊!当r=0是,它输出的其实是ascii码中的第一个。
写成putchar(r+48)也行。

为什么加48可以啊

读书人网 >C语言

热点推荐