2016-10-07 18 views
-3

は、私は次のパターンに印刷しようとしている。しかしループ内に特殊文字を印刷する方法は?

@@@@@@@@ 
@@@@@@@ 
@@@@@@ 
@@@@@ 

を、私の代わりにこれを取得しています:

@ABCDEFG 
ABCDEFG 
BCDEFG 
CDEFG 

私は私が間違っているのかわからないんだけど。私はフィードバックや方向性を感謝します。

#include <stdio.h> 
#define ROWS 4 
#define CHARS 8 

int main(void) 
{ 
    for(int row = 0; row < ROWS; row++) 
    { 
     for(char ch = ('@' + row); ch < ('@' + CHARS); ch++) 
      printf("%c", ch); 
     printf("\n"); 
    } 

    return 0; 
} 
+0

はあなたのコードをデバッグしようとしたことがありますか? – xxbbcc

+0

私はテキストエディタを使用しているので、デバッガはありません。 – DDKGM

+3

'@ '+ row'はどうしますか? – Arkadiy

答えて

5

+演算子は、あなたが思うように動作しません。 @はASCII値(64)に変換され、次にrowが追加されます。 row2の場合は、次のようになります。Aという数字(64 + 2)に対応する文字を印刷します。

Here's an ASCII Table

私はこのような何かに内部ループを変更します

for(int ch = row; ch < CHARS; ch++) { 
    printf("%c", '@'); 
} 
printf("\n"); 
5

は、なぜあなたはその文字で二forを複雑にしています。それは単に

for(int col = row; col < CHARS; col++) 
    printf("%c", '@'); 
+2

または 'printf(" @ ");'さらには 'putchar( '@');'印刷される文字が定数である場合、 '%c'変換は無意味です。 – user3386109

+0

@ user3386109私は質問者を新しい関数 'putchar'と混同する必要はありませんが、もちろん偉大な選択肢です。一方、私は 'printf(" @ ")'が安全でない可能性があると考えます。彼は心を変えて、キャラクターを '@ 'から'%'に変えることができ、彼は失われます。 – j123b567

+0

@ user3386109良いコンパイラは 'printf("%c "、 '@');'、 'printf(" @ ");'、 'putchar( '@');'と同じコードを生成します。より大きいコードのコンテキストに合ったものを使用し、コンパイラにこれらの小さな最適化を処理させることをお勧めします。 – chux

0

変更しCHにすることができ '@' printf("%c", '@');

関連する問題