2

これが私のコードに関連するビットです:

//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: ��������������
     ������|�������������|
     ���������������������

^^これらは不明な文字である必要があります。

とにかく、私はこの問題を修正しようとしましたが、これまでのところ成功していません。何が起こっているので、これが起こりますか?

4

2 に答える 2

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

コードを変更して、希望どおりに印刷することができます。お役に立てれば。

于 2012-10-31T06:09:09.537 に答える
1

文字そのものを印刷したい。ではなく文字を渡しchar*ます。

  printf("%c", *a);
于 2012-10-31T05:59:00.550 に答える