08/01/23 22:37:39
質問です。
#include <stdio.h>
int main(void)
{
static char *month[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int i;
char *p;
for(i = 0; i < sizeof(month)/sizeof(month[0]); i++){
for(p = month[i]; *p != '\0'; p++)
if(*p == 'r')
break;
if(*p != '\0')
puts(month[i]);}
return 0;
}
これを小文字のrだけじゃなく大文字のRも大丈夫なようにするにはどうすればいいのでしょうか?
34:デフォルトの名無しさん
08/01/23 22:38:44
'R' とも比較する
35:デフォルトの名無しさん
08/01/23 22:39:09
toupper((unsigned char)*p) == 'R'
36:デフォルトの名無しさん
08/01/23 22:39:38
>>33
if((*p == 'r') || (*p == 'R'))
tolower()
37:デフォルトの名無しさん
08/01/23 22:39:41
if(*p == 'r' || *p == 'R')
38:デフォルトの名無しさん
08/01/23 22:43:00
あぁ成る程。||を使えばよかったんですね。
どうもありがとうございました。
39:デフォルトの名無しさん
08/01/23 23:28:02
scanf()で文字を読み込むときに\nが残るってはなしじゃねーの?
40:デフォルトの名無しさん
08/01/24 06:17:38
void wall(int p,int q)
{if (meiro[p][q]!=1)
{int dir;
meiro[p][q]=3;
dir = rand()%4+1;
if (dir==1&&meiro[p+2][q]!=3)
{meiro[p+1][q]=3;
wall(p+2,q);}
if (dir==2&&meiro[p-2][q]!=3)
{meiro[p-1][q]=3;
wall(p-2,q);}
if (dir==3&&meiro[p][q+2]!=3)
{meiro[p][q+1]=3;
wall(p,q+2);}
if (dir==4&&meiro[p][q-2]!=3)
{meiro[p][q-1]=3;
wall(p,q-2);
}}}
p,qはmeiro[p][q]に対応していて、meiro[偶数][偶数]の点です。
迷路を自動生成するプログラム作ってます。
色々調べて壁伸ばし法で作ることにして、wall関数なるものを自作しました。
0:道 1:壁 3:作りかけの壁
一応、迷路っぽいものはできるのですが、なんというかすかすかのものができてしまいます。
41:デフォルトの名無しさん
08/01/24 10:09:40
続きは?
42:デフォルトの名無しさん
08/01/24 18:13:59
>>40
C言語っつーよりアルゴリズムの問題だと思うけど、
どのみちそこだけ出されてもなんとも言えない
wallをどういう風に呼んでるかとか、
どのタイミングと条件でmeiro[x][y]を1にセットするのかとか
わからないと
43:デフォルトの名無しさん
08/01/24 20:39:20
しかしみずれえソースだな
44:デフォルトの名無しさん
08/01/24 20:45:25
>>40
伸ばす方向に壁ができてたらそれで終わりにしないで、空いている方向を選ぶようにしてみたら?