- 締切済み
C言語のプログラミング配列・forを使った検索
C言語のプログラミングで、配列とforを使った検索の表し方がわかりません。 numにはキーボードから任意の数字を入力し、 1ならば25、2ならば30、、、といったように 対応する数字を表示させ、1行目にない数字が入力された時は 「NoData」と表示させたいのですが、上手くいきません; 本当はもっと配列が多いのですが4つでやってみると #include <stdio.h> main() { int data[2][4]{{1,2,3,4},{25,30,45,50}} , num , i ; printf("num?"); scanf(&num); for(i=0; i>4;i++) if(num== data[0][i]){ printf("number is \n",data[1][i]);} else {printf("NoData\n"); } return0 ; } こうかと思ったのですが上手くいきません、、、 どなたかお願いします!
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
>int data[2][4]{{1,2,3,4},{25,30,45,50}} >scanf(&num); C言語の文法をあまり理解できていないようです。 基礎からやり直してみてはどうでしょうか。
- D-Matsu
- ベストアンサー率45% (1080/2394)
とりあえず私が改造するなら、 struct elem { int key; int value; }; とか構造体を作って、 struct elem data[] = {{1, 25}, {2, 30}, {3, 45}, {4, 50}} , num , i; int data_size = sizeof(data) / sizeof(struct elem); と変数を定義した上で、 for(i = 0; i < data_size; i ++) { if(num == data[i].key) break; } if(i == data_size) { printf("NoData\n"); }else{ printf("number is %d\n", data[i].value); } とします。 こっちの方がソース上で意味が見やすいのと、配列も意味のあるデータ単位でまとまりますから。
- tsuduki123
- ベストアンサー率32% (21/65)
>C言語のプログラミングで、配列とforを使った検索の表し方がわかりません。 ということなので、質問とは直接関係ありませんが 検索という目的ならば qsort()とbsearch()の使い方も調べておくと勉強になると思いますよ。 ↓はFreeBSDのページですが関数自体は標準規格なのでどのコンパイラにもあるはずです。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=qsort&dir=jpman-8.3.2%2Fman§=0 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=bsearch&dir=jpman-8.3.2%2Fman§=0
- Cfg4sA3W4s
- ベストアンサー率38% (31/81)
修正すると、こんな感じになります。 #include <stdio.h> int main(void) { int data[2][4] = { {1, 2, 3, 4}, {25, 30, 45, 50} }, num, i, flug = 0; printf("num?"); scanf("%d", &num); for(i = 0; i < 4;i++) { if(num == data[0][i]){ printf("number is %d\n",data[1][i]); flug = 1; break; } } if(flug == 0) { printf("NoData\n"); } return 0; }
- D-Matsu
- ベストアンサー率45% (1080/2394)
> for(i=0; i>4;i++) 条件が不正なのでforの中に入りません。 for内も、 ・ヒットしたら出力してbreak だけにして、NoDataは外に書かないとダメ。 まぁ、二次配列じゃなくて構造体の配列使った方がいいような気もしますが。 あとはキーが連番ならわざわざキー検索せずに一次配列でインデックス参照でもいいんじゃね?とか。
補足
回答ありがとうございます。 実際のキーは連番ではありません><