仅使用putchar在c中打印整数

时间:2014-03-21 03:28:16

标签: c putchar

这是一个古老的做法,我试图找出我的代码出错的地方:编写一个c程序,仅使用putchar打印整数。我知道一个正确的方法是:

void printnumber(int n)
{

    if (n < 0) {
        putchar('-');
        n = -n;
    }

    if (n == 0)
        putchar('0');

    if (n/10)
        printnumber(n/10);

    putchar(n%10 + '0');
}

我只是想知道为什么我这样做的方式不起作用,虽然当我尝试使用步骤调试时,它看起来我的程序没有问题,但是,代码是打印一些有趣的字符。我认为这是因为putchar()读取数字为ascii值并打印对应ascii值的字符,也许这就是为什么在上面的代码中我们使用putchar(n%10+'0'),所以我试图添加{{1我所有的putchar代码,但它不能正常工作。所以这是我的代码和结果,当i = -123

时没有和'0'
'0'

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

第一个版本对我来说就像一个魅力。

这里有main的功能。

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

void printnumber(int n)
{

   if (n < 0) {
       putchar('-');
       n = -n;
   }

   if (n == 0)
      putchar('0');

   if (n/10)
      printnumber(n/10);

   putchar(n%10 + '0');
}

int main(int argc, char** argv)
{
   int n = atoi(argv[1]);
   printnumber(n);
   printf("\n");
}

这里有一些输出:

~/Stack-Overflow/cpp>>./test-44
Segmentation fault
~/Stack-Overflow/cpp>>./test-44 10
10
~/Stack-Overflow/cpp>>./test-44 3456789
3456789
~/Stack-Overflow/cpp>>./test-44 -10
-10
~/Stack-Overflow/cpp>>./test-44 -95823
-95823
~/Stack-Overflow/cpp>>

PS。我在Linux上测试,使用gcc 4.7.3。

现在关于第二种方法......

  1. 绝对需要在调用'0'时将putchar添加到整数值。
  2. 在第一个if区块和最后一个else if区块中,您已经处理了-ve数字。
  3. 打印0仍是一个问题。
  4. 在第一个if块中,递归必须在打印之前。否则,您将以相反的顺序打印数字。
  5. 这是我想出的:

    void printnumber(int i)
    {
        if(i/10!=0)
        {
            printnumber(i/10);
            if ( i > 0 )
            {
               putchar(i%10 + '0');
            }
            else
            {
               putchar(-i%10 + '0');
            }
        }
        else if((i/10==0) && (i%10!=0) && (i>0))
        {
            putchar(i%10 + '0');
        }
        else if((i/10==0) && (i%10!=0) && (i<=0))
        {
            putchar('-');
            putchar(-i%10+'0');
        }    
    }
    

    PS。我的版本仍然存在数字0的问题。它没有打印任何东西。

答案 1 :(得分:1)

if(i/10!=0)
{
    putchar(i%10);
    printnumber((i-i%10)/10);
}

如果i < 0,那么无论你是putchar()还是第一个+ '0'都有问题。