在C中打印未知字符,而不是破折号和空格

时间:2012-10-31 05:56:15

标签: c pointers char

以下是我的代码的相关位:

//helper function that prints "------" lines or "      " lines
void li(char*  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

//helper function that prints out bar 
void bar(int length, int height)
{
     int i;
//prints out top line
     li("-", length);

//prints middle lines of spaces and "|"
     for (i=0;i<height-2;i++) {
     printf("\n");
     li(" ", 6);
     printf("|");
     li(" ", length-2);
     printf("|");
}
//prints bottom line
     if (height>=2){
     printf("\n");
     li(" ", 6);
     li("-", length);}
  return ;
}

预期产出:

The: ------------
     |          |
     ------------

实际输出

The: ��������������
     ������|�������������|
     ���������������������

^^这些应该是未知的字符。

无论如何,我已经尝试解决这个问题,但到目前为止还没有成功。是什么导致了这种情况发生?

2 个答案:

答案 0 :(得分:2)

问题在于你理解字符和字符串的方式。 要解决此问题,您可以更改li()的签名。定义应该看起来像

void li(char  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

当调用函数li()时,使用单引号而不是双引号。 li("-", length);应为li('-', length);,依此类推。 我进行了更改并运行了您的代码。虽然它没有按预期打印字符,但它至少不能打印不可打印的字符。 这是代码和输出。

//helper function that prints "------" lines or "      " lines
void li(char  a, int len)
{
   int i;
      for (i=0; i<len; i++)
        {
          printf("%c",a);
        }
}

//helper function that prints out bar 
void bar(int length, int height)
{
     int i;
//prints out top line
     li('-', length);

//prints middle lines of spaces and "|"
     for (i=0;i<height-2;i++) {
     printf("\n");
     li(' ', 6);
     printf("|");
     li(' ', length-2);
     printf("|");
}
//prints bottom line
     if (height>=2){
     printf("\n");
     li(' ', 6);
     li('-', length);}
  return ;
}
main()
{
bar(5,5);
li('G',5);

}

输出:

-----
      |   |
      |   |
      |   |
      -----GGGGG

您可以对代码进行更改,使其按照您希望的方式进行打印。 希望这会有所帮助。

答案 1 :(得分:1)

您想要打印角色本身。传递角色,而不是char*

  printf("%c", *a);