#include <stdio.h>
char *month_name(int n){
static char *months[] = { "January","February","March","April",
"May","June","July","August",
"September","October","November","December",
"unknown month"};
if(n=1) printf("%c",*months[0]);
else if(n=2) printf("%c",*months[1]);
else if(n=3) printf("%c",*months[2]);
else if(n=4) printf("%c",*months[3]);
else if(n=5) printf("%c",*months[4]);
else if(n=6) printf("%c",*months[5]);
else if(n=7) printf("%c",*months[6]);
else if(n=8) printf("%c",*months[7]);
else if(n=9) printf("%c",*months[8]);
else if(n=10) printf("%c",*months[9]);
else if(n=11) printf("%c",*months[10]);
else if(n=12) printf("%c",*months[11]);
else printf("%c",*months[12]);
}
int main(void){
int n;
while(scanf("%d",&n)==1){
month_name(n);
}
return 0;
}
ポインタを使った表示方法
-
タマ
ポインタを使った表示方法
ポインタを用いて、数字を入力すると月の名前を表示するプログラムを作っているのですが、うまくいきません。
char *month_name(int n)とstatic char *months[]の2つの名称は変えないようにしたいですが、どうすればいいでしょうか?
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: ポインタを使った表示方法
これだとイニシャルの一字しか表示されないのではないですか?タマ さんが書きました:ポインタを用いて、数字を入力すると月の名前を表示するプログラムを作っているのですが、うまくいきません。char *month_name(int n){ static char *months[] = { "January","February","March","April", "May","June","July","August", "September","October","November","December", "unknown month"}; if(n=1) printf("%c",*months[0]); else if(n=2) printf("%c",*months[1]); else if(n=3) printf("%c",*months[2]); else if(n=4) printf("%c",*months[3]); else if(n=5) printf("%c",*months[4]); else if(n=6) printf("%c",*months[5]); else if(n=7) printf("%c",*months[6]); else if(n=8) printf("%c",*months[7]); else if(n=9) printf("%c",*months[8]); else if(n=10) printf("%c",*months[9]); else if(n=11) printf("%c",*months[10]); else if(n=12) printf("%c",*months[11]); else printf("%c",*months[12]); }
文字列を表示する場合は
printf("%s", 文字列の先頭アドレス);
とします。
また、このifの列挙を見るとmonthsの添え字がn-1に対応していることに気が付きます。
さらに、nの値の範囲が(1 <= n <= 12)でない時にmonths[12]が表示されることにも気が付きます。
これらより、もうちょっとスマートに書けるのでそれにも挑戦してみてください。
あと、これは戻り値として文字列(月の名前)の先頭アドレスを返すことが望まれてるのではないでしょうか・・・?
[hr][追記]
また、ただ「うまくいきません」と言うのではなく、どういったところがうまくいかないのかを具体的にしていただくと回答しやすいので次からはそうしてください。(詳しくはフォーラムルールをお読みください。)
Re: ポインタを使った表示方法
if文の比較演算子をもう一度確認して下さい。
n=1 という式は正しいですか?
さらに言うと、こんなに大量のif文を使う必要はあるのでしょうか。
もっと簡潔に書けると思いますよ。
n=1 という式は正しいですか?
さらに言うと、こんなに大量のif文を使う必要はあるのでしょうか。
もっと簡潔に書けると思いますよ。
-
タマ
Re: ポインタを使った表示方法
char *month_name(int n){
static char *months[] = { "January","February","March","April",
"May","June","July","August",
"September","October","November","December",
"unknown month"};
if(1<=n&&n<=12) printf("%c\n",*months[n-1]);
else printf("%c\n",*months[12]);
}
ですが、月の名前を""内全体で表示したいのに頭文字しか出てこないので
そこで悩んでいます。
*month_nameと*months[]は変えないように言われています。
Re: ポインタを使った表示方法
bitter_fox さんの投稿をよく読みましたか?タマ さんが書きました: ですが、月の名前を""内全体で表示したいのに頭文字しか出てこないので
そこで悩んでいます。
-
タマ
Re: ポインタを使った表示方法
#include <stdio.h>
char *month_name(int n){
static char *months[] = { "January","February","March","April",
"May","June","July","August",
"September","October","November","December",
"unknown month"};
if(1<=n&&n<=12) printf("%s\n",months[n-1]);
else printf("%s\n",months[12]);
}
int main(void){
int n;
while(scanf("%d",&n)==1){
month_name(n);
}
return 0;
}
読解力が足りなくて申し訳ないです。