C言語入門のlist6-14を別の表現で示すには

解決


とら  2011-04-22 14:24:41  No: 72559  IP: 192.*.*.*

下記の言語でWhile文をreturn一つで表現するのはどの様に表現したらよいのか教えてください。
#include <stdio.h>

#define NUMBER 5
#define FAILED -1

//  要素数noの配列vcからkeyと一致する要素を探索
int search(const int vc[], int key, int no)

{
  int i=0;

  while(1)
  {
    if(i==no)
      return(FAILED);
    if(vc[i]==key)
      return(i);
    i++;
  }
}

int main(void)
{
  int i, ky, idx;
  int vx[NUMBER];

  for(i=0;i<NUMBER; i++)
  {
    printf("vx[%d}:",i);
    scanf("%d",&vx[i]);
  }

  printf("探す値:");
  scanf("%d",&ky);

  idx=search(vx,ky,NUMBER);

  if(idx==FAILED)
    printf("\a探索に失敗しました\n");
  else
    printf("%dは%d番目にあります。\n",ky,idx+1);
  return(0);
}

編集 削除
forty-five  2011-04-22 16:31:53  No: 72560  IP: 192.*.*.*

目的はなんだろう。とんち問題かな。

int search(const int vc[], int key, int no)
{
    int i=0;
    int result=FAILED;

    while(1)
    {
        if(i==no) /* i>=no の方がいいかも */
            break;
        if(vc[i]==key)
        {
            result=i;
            break;
        }
        i++;
    }
    return result;
}

for文なら

int search(const int vc[], int key, int no)
{
    int i;
    int result = FAILED;

    for (i = 0; i < no; i++) {
        if (vc[i] == key) {
            result = i;
            break;
        }
    }

    return result;
}

編集 削除
とら  2011-04-23 15:55:42  No: 72561  IP: 192.*.*.*

とんちではないのですが、rituenひとつで表現できないかと
思い考えたのですが、うまくいかずちょっと人の手が借りたくなりました。
本当にありあがとうございました。

編集 削除
forty-five  2011-04-23 20:17:54  No: 72562  IP: 192.*.*.*

とんちと思ってこんなのも考えてた。

int search(const int vc[], int key, int no)
{
    int i;

    for (i = 0; (i < no) && (vc[i] != key); i++) {
    }

    return (i < no) ? vc[i] : FAILED;
}

編集 削除
とら  2011-04-24 21:43:15  No: 72563  IP: 192.*.*.*

いろいろな方法があり奥深いことを教えていただきました。
ありがとうございました。
勉強になります。
また、なにかありましたらよろしくおねがいいたします。

編集 削除