こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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 ;
}

こうかと思ったのですが上手くいきません、、、
どなたかお願いします!

投稿日時 - 2011-05-02 11:52:29

QNo.6708697

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>int data[2][4]{{1,2,3,4},{25,30,45,50}}
>scanf(&num);

C言語の文法をあまり理解できていないようです。
基礎からやり直してみてはどうでしょうか。

投稿日時 - 2011-05-02 21:59:58

ANo.4

とりあえず私が改造するなら、
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);
}

とします。
こっちの方がソース上で意味が見やすいのと、配列も意味のあるデータ単位でまとまりますから。

投稿日時 - 2011-05-02 16:59:35

ANo.3

>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&sect=0

http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=bsearch&dir=jpman-8.3.2%2Fman&sect=0

投稿日時 - 2011-05-02 14:20:24

ANo.2

修正すると、こんな感じになります。

#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;
}

投稿日時 - 2011-05-02 12:21:04

ANo.1

> for(i=0; i>4;i++)

条件が不正なのでforの中に入りません。
for内も、
・ヒットしたら出力してbreak
だけにして、NoDataは外に書かないとダメ。

まぁ、二次配列じゃなくて構造体の配列使った方がいいような気もしますが。
あとはキーが連番ならわざわざキー検索せずに一次配列でインデックス参照でもいいんじゃね?とか。

投稿日時 - 2011-05-02 12:08:53

補足

回答ありがとうございます。
実際のキーは連番ではありません><

投稿日時 - 2011-05-02 12:55:18

あなたにオススメの質問