だから、私はすなわち、出力にマリオのピラミッドのフォーマットされた文字列をしようとしています:Cのprintf(%* s)説明
##
###
####
点はスペースを表しています。高さは、実行時にユーザーによって決定されます。次のコードは私が動作することがわかったものです。
#include <stdio.h>
void hash(void) {
printf("%s", "#");
}
int main(void) {
int height;
printf("%s", "Enter height of mario's pyramid: ";
scanf("%i", &height);
for (int i = 0; i < height; i++) {
int spaces;
if (height == 1 || i == (height - 1) {
spaces = 0;
}
else {
spaces = height - (i + 1);
printf("%*s", spaces, " ");
}
for (int j = 0; j < (i + 1); j++) {
hash();
}
printf("\n");
}
return 0;
}
ここで、何がうまくいくかを見てから、動作しないものを見てみましょう。forループ以外はすべて同じです。
#include <stdio.h>
void hash(void) {
printf("%s", "#");
}
int main(void) {
int height;
printf("%s", "Enter height of mario's pyramid: ";
scanf("%i", &height);
for (int i = 0; i < height; i++) {
int spaces;
spaces = height - (i + 1);
printf("%*s", spaces, " ");
for (int j = 0; j < (i + 1); j++) {
hash();
}
printf("\n");
}
return 0;
}
あなたが見ることができるように、唯一の違いは、height == 1
またはi == height - 1
場合は0に空白を設定し、条件文ですが、結果は完全に異なっています。何らかの理由で、条件文を使用すると、スペースが印刷されていないように見えますが、これは実際に私が望んだものですが、これをどうやってやるべきかはわかりません。だから、私は誰かが正確に何が起こっているのか分かっていて、それを私に説明することができるのだろうかと思っていた。
オーケー:
変更それは空の文字列を印刷します。だから私はもっと具体的にすべきだと思います。最初のプログラムはなぜ機能していますか?スペースはまだ印刷する必要がありますが、それらはありませんか?奇妙な! –
@TimBeyer 'printf'への呼び出しが' if'部分ではなく 'else'部分の内側にあるので、最初のケースでは印刷されないので、決して呼び出されません。 – dbush
高さ== 1、高さ== -1の場合を除いて、空白が表示されます。 –