出力文字の中央寄せ
Re: 出力文字の中央寄せ
どうしても、と書かれていますが具体的にどのような方法を試されたのでしょうか?ガムテープ さんが書きました:中央に記号を寄せたくても、どうしても左詰めになってしまいます。
普通に*の左側にスペースを適切な個数入れれば良いと思いますよ。
追記:コードはコードタグで囲って下さい
http://dixq.net/board/board.html#k10
Re: 出力文字の中央寄せ
putchar(' *');やputchar(' * ');を試していました。
*の左とは、Ctrl+F5の後の黒い画面で ということでしょうか?
編集画面のどこに入れればいいのかわかりません。
ちなみにC言語は初心者です。表現が分かりにくくて申し訳ないです。
*の左とは、Ctrl+F5の後の黒い画面で ということでしょうか?
編集画面のどこに入れればいいのかわかりません。
ちなみにC言語は初心者です。表現が分かりにくくて申し訳ないです。
Re: 出力文字の中央寄せ
例えば、ピラミッドの頂点の*を中央に表示するには、
putchar('*'); の前に、スペースを9個表示させます。
もう一つ下の段**は、スペースを8個表示させます。
これを一番下の段まで繰り返せばよいです。
putchar('*'); の前に、スペースを9個表示させます。
もう一つ下の段**は、スペースを8個表示させます。
これを一番下の段まで繰り返せばよいです。
Re: 出力文字の中央寄せ
自分なりに努力したのですが、これ以外に検討がつきません・・・・・
ご指導お願いします。
お手数をかけてしまい申し訳ないです。
ご指導お願いします。
お手数をかけてしまい申し訳ないです。
{
int i,j;
for (i=1; i<=10; i++){
for(j=1; j<=2*i-1; j++){
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf(" \n"); putchar('*');
printf("\n"); putchar('*');
}
putchar('\n');
}
return 0;
}
Re: 出力文字の中央寄せ
そのコードの5行目から14行目までは、空白の数が異なるだけで他は同じパターンですよね。
そこをfor文によるループにしてみたら?
あと、ネット上でよく見かける誤字ですが、
誤:検討がつかない
正:見当が付かない
です。ご注意あれ。
そこをfor文によるループにしてみたら?
あと、ネット上でよく見かける誤字ですが、
誤:検討がつかない
正:見当が付かない
です。ご注意あれ。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 出力文字の中央寄せ
h2so5さんにご返事をいただいてからずっと考えたり試したりしているのですが、うまくいきません。
for~のあとに
n=10-i;
printf(" ",n);
だったり、
printf(" ",10-i);
その他似たような事を試しましたが左にスペースが一マスずつ表示されるだけでした。
答えとまではいかなくても、別のヒントをお願いします。
for~のあとに
n=10-i;
printf(" ",n);
だったり、
printf(" ",10-i);
その他似たような事を試しましたが左にスペースが一マスずつ表示されるだけでした。
答えとまではいかなくても、別のヒントをお願いします。
Re: 出力文字の中央寄せ
1行目:1個の*
2行目:3個の*
3行目:5個の*
4行目:7個の*
5行目:9個の*
6行目:11個の*
7行目:13個の*
8行目:15個の*
9行目:17個の*
10行目:19個の*
行数と*の個数との間の関係はおわかりのようですね。
さて、上記の*群の三角形がプラミッド型を構成するには、各行の*群の前に適切な数の空白が必要ですね。
10行目から考えていきましょうか。
10行目:0個の空白のあとに19個の*
9行目:1個の空白のあとに17個の*
8行目:2個の空白のあとに15個の*
7行目:3個の空白のあとに13個の*
6行目:4個の空白のあとに11個の*
5行目:5個の空白のあとに9個の*
4行目:6個の空白のあとに7個の*
3行目:7個の空白のあとに5個の*
2行目:8個の空白のあとに3個の*
1行目:9個の空白のあとに1個の*
さて、行数と空白の個数との間には、どういう関係があるでしょうか。
結局、h2so5さんの回答と同じことを言ってるだけなんですけどね。
2行目:3個の*
3行目:5個の*
4行目:7個の*
5行目:9個の*
6行目:11個の*
7行目:13個の*
8行目:15個の*
9行目:17個の*
10行目:19個の*
行数と*の個数との間の関係はおわかりのようですね。
さて、上記の*群の三角形がプラミッド型を構成するには、各行の*群の前に適切な数の空白が必要ですね。
10行目から考えていきましょうか。
10行目:0個の空白のあとに19個の*
9行目:1個の空白のあとに17個の*
8行目:2個の空白のあとに15個の*
7行目:3個の空白のあとに13個の*
6行目:4個の空白のあとに11個の*
5行目:5個の空白のあとに9個の*
4行目:6個の空白のあとに7個の*
3行目:7個の空白のあとに5個の*
2行目:8個の空白のあとに3個の*
1行目:9個の空白のあとに1個の*
さて、行数と空白の個数との間には、どういう関係があるでしょうか。
結局、h2so5さんの回答と同じことを言ってるだけなんですけどね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 出力文字の中央寄せ
printfについて
%dなどを使わない場合はprintf("文字列");で文字列が出力できます。
改行したい場合はprintf("\n");でできます。
h2so5さんのいっていることは
スペースを一つ書くという処理を
10-i 回繰り返すように書けばできます。
%dなどを使わない場合はprintf("文字列");で文字列が出力できます。
改行したい場合はprintf("\n");でできます。
h2so5さんのいっていることは
スペースを一つ書くという処理を
10-i 回繰り返すように書けばできます。
Re: 出力文字の中央寄せ
>さて、上記の*群の三角形がプラミッド型を構成するには、各行の*群の前に適切な数の空白が必要ですね。
各行に、適切な数の空白を出力する際、*を出力するのと同じようにfor文によるループを使えばいいんですよ。
各行に、適切な数の空白を出力する際、*を出力するのと同じようにfor文によるループを使えばいいんですよ。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 出力文字の中央寄せ
#include<stdio.h>
int main(void)
{
int i,j,n,m;
for (n=1; n<=9; n++){
putchar(' ');
}
for (i=1; i<=10; i++){
for(j=1; j<=2*i-1; j++)
putchar('*');
putchar('\n');
}
return 0;
}
2行目以降をしようとして
for(m=0; m<=9; m++)と打ちましたが、おかしい事になります。
m<=n-1と打っても下の行にはスペースが現れず、
改行を入れると上の方にスペースだけが固まってしまいます。
どうしたらいいでしょうか?
Re: 出力文字の中央寄せ
スペースを表示する処理が私がヒントを出した場所に入っていませんし、
スペースを表示する回数が変数 i の影響を全く受けていませんよ。
変数 i を使えば1行目と2行目で処理を分けないで書けます。
10行処理するのに、nmopqrstuv.... と全部書くつもりですか?
ヒントをもう一度良く読んでください。
あと、
printfの引数をうまく変えればスペースを 10-n 個表示できるので、 printf について調べてみてください。
スペースを表示する回数が変数 i の影響を全く受けていませんよ。
変数 i を使えば1行目と2行目で処理を分けないで書けます。
10行処理するのに、nmopqrstuv.... と全部書くつもりですか?
ヒントをもう一度良く読んでください。
あと、
これはすごく惜しいです。このような、forループ使わない方法もあります。ガムテープ さんが書きました:h2so5さんにご返事をいただいてからずっと考えたり試したりしているのですが、うまくいきません。
for~のあとに
n=10-i;
printf(" ",n);
printfの引数をうまく変えればスペースを 10-n 個表示できるので、 printf について調べてみてください。
Re: 出力文字の中央寄せ
どうして、空白を出力する処理が、*を出力するためのループの「外」にあるのでしょうか?
ある行を出力する処理の「中」に、
・適切な数の空白を出力する
・適切な数の*を出力する
という2つの処理を含んでいるんじゃないんですか?
ある行を出力する処理の「中」に、
・適切な数の空白を出力する
・適切な数の*を出力する
という2つの処理を含んでいるんじゃないんですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 出力文字の中央寄せ
やっとできました!
for(j=0; j<=10-i; j++)という文になぜ気づかなかったか不思議なくらいです。
最初から最後まで丁寧なアドバイスありがとうございました。
これからは次々問題をやる前に、今までのところをしっかり復習しようと思います。
ほんとにありがとうございました。感謝の気持ちでいっぱいです。
for(j=0; j<=10-i; j++)という文になぜ気づかなかったか不思議なくらいです。
最初から最後まで丁寧なアドバイスありがとうございました。
これからは次々問題をやる前に、今までのところをしっかり復習しようと思います。
ほんとにありがとうございました。感謝の気持ちでいっぱいです。