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を代入しているということであっていますか?
簡単な質問ですいません
No.1ベストアンサー
- 回答日時:
>メイン関数内の put_haiku(haiku);
>はどのような役割をしているのでしょうか?
引数「nyuuryoku」で渡されたアドレスから格納されている文字列を(半角)2文字ずつ出力しています。
「縦書き」ということなので「全角(2Byte)文字」を意識しているのでしょう。
>ユーザー定義関数の char *ptr = nyuuryoku;
>はポインタを宣言し、さらに初期値にnyuuryokuを代入しているということであっていますか?
ほぼあっています。
char型のポインタ変数ptrを宣言し、ptrに対して引数「nyuuryoku」で渡されたアドレス(mainで宣言されているhaikuの先頭アドレス)を代入しています。
No.2
- 回答日時:
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の部分がずれないように工
夫すると良いでしょう。
では。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 中3の英語についてです。 have been 〜ing (現在完了進行形)の使い道がよくわかりません 8 2022/06/08 18:02
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のmemcpy関数について質問...
-
C言語:小文字を大文字に変換す...
-
char型の文字列をウィンドウに...
-
C言語のintとcharの違いってな...
-
char型について【初心者です】
-
GDIによるメモリ上からの画像デ...
-
ポインタで詰まりました;
-
文字列の途中から途中までを抽出
-
const char* s1とただのchar s1...
-
プログラムの中身の意味
-
エクセルのMID関数は、C言語では?
-
C言語で文字列置き換え
-
C言語のプログラムについてです
-
関数から配列を返すには?
-
リッチテキストボックスの中身...
-
クイックソートの比較交換回数...
-
C言語 配列の長さの上限
-
2次元配列を確保したいのですが、
-
%dなどの違い
-
セグメントエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
DWORDとcharの変換
-
const char* s1とただのchar s1...
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
char 文字列型 の表現範囲が-12...
-
fgetc( )の戻り値はなぜ整数??
-
csvファイルをfscanfで読み込む...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報