- ベストアンサー
プログラムの中身の意味
C言語で縦書き表示のプログラムを習ったんですが、プログラム中でわからない個所がありました。まずは、プログラムです #include<stdio.h> void put_haiku(char *nyuuryoku); int main() { char haiku[100]; puts("俳句を入力せよ"); fgets(haiku,sizeof(haiku),stdin); if(haiku[strlen(haiku)-1] == '\n'){ haiku[strlen(haiku)-1] = '\0'; } put_haiku(haiku); return 0; } void put_haiku(char *nyuuryoku) { char *ptr = nyuuryoku; while(*ptr !='\0'){ printf("%c%c\n",ptr[0],ptr[1]); ptr += 2; } return ; } メイン関数内の put_haiku(haiku); はどのような役割をしているのでしょうか? もうひとつ ユーザー定義関数の char *ptr = nyuuryoku; はポインタを宣言し、さらに初期値にnyuuryokuを代入しているということであっていますか? 簡単な質問ですいません
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>メイン関数内の put_haiku(haiku); >はどのような役割をしているのでしょうか? 引数「nyuuryoku」で渡されたアドレスから格納されている文字列を(半角)2文字ずつ出力しています。 「縦書き」ということなので「全角(2Byte)文字」を意識しているのでしょう。 >ユーザー定義関数の char *ptr = nyuuryoku; >はポインタを宣言し、さらに初期値にnyuuryokuを代入しているということであっていますか? ほぼあっています。 char型のポインタ変数ptrを宣言し、ptrに対して引数「nyuuryoku」で渡されたアドレス(mainで宣言されているhaikuの先頭アドレス)を代入しています。
その他の回答 (2)
- sinagawa68
- ベストアンサー率66% (2/3)
sinagawa68です。 先ほどの回答は全角文字を考慮していませんでた。 申しわけない・・・。
- sinagawa68
- ベストアンサー率66% (2/3)
su-senさん はじめまして。 sinagawa68と申します。 put_haiku(haiku)は引数haiku文字列を縦書き2行でコンソール出力機能を持たせたい のですかね?それとも俳句だから5・7・5かな? 上記プログラムでは、隣り合う文字同士をを並べて出力しているだけなので、文が変に なるのではないですか? char *ptr = nyuuryoku;は構文的に誤りはありません。 ただ上記のput_haiku関数の機能を満たす上では特に必要な宣言ではありません。 引数のnyuuryokuを流用することもできます。プログラムの可読性を向上させたいので あれば話は別ですが・・・、あるところではptrを配列の添え字で参照し、またあるとこ ろではポインタを直接進めるといった書き方は正直可読性が悪いように思えますので、 できればどちらかに統一すると良いでしょう。 余談ですが縦書き5・7・5などで出力したいのであれば、横3文字ずつの出力にし、ル ープ処理とポインタの移動位置を5・7・5に合うように調整するとよいと思います。 また、5・7・5の5の部分はスペース文字などを挿入して7の部分がずれないように工 夫すると良いでしょう。 では。
お礼
なるほど。ものすごくわかりやすいです。ありがとうございます。