C中使用二进制搜索算法的简单数字猜谜游戏

时间:2013-07-14 08:49:44

标签: c arrays function binary-search

这个程序要求我:编写一个与用户进行简单数字猜测的程序。用户想到一个数字,然后回答计算机提出的一系列问题,直到它正确猜到 号。

我的问题是编译器说:'arr'未声明(首次在此函数中使用)

到目前为止,这是我的代码:

#include <stdio.h>
#include "strlib.h"
#include "simpio.h"

#define size 200

int binSearch (int num);
void getArray (int arr[]);

main()
{
      printf("Think of a number in the range of 1-200 and I'll guess it.\n");
      int arr[size];
      getArray(arr);
      binSearch(arr);
      getchar();
}

void getArray (int numbers[])
{
      int number;

      for(number=1;number>=200;number++)
      {
                 arr[number]=number;                                 
      }    
}

int binSearch(int num)
{
      int low, high, mid;
      string strReply;

      low=0;
      high=size-1;

      while(low<=high);
      {
                 mid=low+high/2;
                 printf("\nIs the number %d ?\t", mid);
                 strReply= GetLine();
                 if(StringEqual(strReply, "no"))
                 {
                          printf("Is the number less than %d ?\t", mid);
                          if(StringEqual(strReply, "no"))
                          { 
                                     high=mid-1;                         
                          }
                          else if(StringEqual(strReply, "yes"))
                          {
                                     low=mid+1;     
                          }
                 }
                 else if(StringEqual(strReply, "yes"))
                 { 
                          return(mid);     
                 }
                 else
                 {
                          return(-1);    
                 } 
}

谢谢:)

3 个答案:

答案 0 :(得分:6)

void getArray (int numbers[])
{
  int number;

  for(number=1;number>=200;number++)
  {
             arr[number]=number;     // this should be numbers[number]                            
  }    
}

您将数组传递给函数,但是将数组用作全局数据。

答案 1 :(得分:2)

@Adrian Jandl说的话。

另请注意您的循环错误两次:

for(number=0; number<200; number++) ...
  1. 数组在C中为零。
  2. 您的数字而数字<200 ,而不是,直到数字&gt; = - 200

答案 2 :(得分:1)

未在getArray函数中定义或声明arr。并且arr也不是全局变量。您可以将arr int main()函数移动到全局区域。