1

名前のリストを検索する関数があり、検索関数を取得して配列のインデックスをメイン関数に戻し、見つかった名前の開始位置を出力しようとしています。これまでに試したことはすべて、プログラムをクラッシュさせるか、奇妙な出力になります。

これが私の検索機能です:

#include<stdio.h>
#include<conio.h>
#include<string.h>

#define MAX_NAMELENGTH 10
#define MAX_NAMES 5

void initialize(char names[MAX_NAMES][MAX_NAMELENGTH], int Number_entrys, int i);
int search(char names[MAX_NAMES][MAX_NAMELENGTH], int Number_entrys);

int main()
{
   char names[MAX_NAMES][MAX_NAMELENGTH];
   int i, Number_entrys,search_result,x;
   printf("How many names would you like to enter to the list?\n");
   scanf("%d",&Number_entrys);
   initialize(names,Number_entrys,i);
   search_result= search(names,Number_entrys);
   if (search_result==-1){
      printf("Found no names.\n");
   }else
   {
      printf("%s",search_result);
   }
   getch();
   return 0;
}

void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys,int i)
{
   if(Number_entrys>MAX_NAMES){
      printf("Please choose a smaller entry\n");
   }else{
      for (i=0; i<Number_entrys;i++){
         scanf("%s",names[i]);
      }
   }
}

int search(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
   int x;
   char new_name[MAX_NAMELENGTH];
   printf("Now enter a name in which you would like to search the list for\n");
   scanf("%s",new_name);

   for(x = 0; x < Number_entrys; x++) {
      if ( strcmp( new_name, names[x] ) == 0 )
      {
         return x;
      }
   } 
   return -1;        
}

前に述べたように、この問題を解決するためにさまざまな方法を試しましたが、それらを機能させることができないようです。上記のようにXを印刷することは、私が試した最後のことであり、したがって、それが機能しないことを知っています。これを行う最も簡単な方法に関する提案はありますか?

4

1 に答える 1

0

strstr の代わりに strcmp を使用しないのはなぜですか?

あなたのコードにはいくつかの大きな問題があるようです: -私は初期化ではなく使用されているようです。- x を int として宣言してから、次を使用します: printf("%s",x) ここではナンセンスです。ちなみに、初期化しないでください!

そのようなものはより良いはずです(私はあなたの初期化関数を持っていないことに注意してください)そして私はコンパイルしようとしませんでした:

int search(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
   int x =0;
   char new_name[MAX_NAMELENGTH];
   printf("Now enter a name in which you would like to search the list for\n");
   scanf("%s",new_name);

   for(x = 0; x < Number_entrys; x++) 
   {
      if ( strcmp( new_name, names[x] ) == 0 )
      {
         return x;
      }
   } 
   return -1;        
 }

主要 :

int main()
{
    char names[MAX_NAMES][MAX_NAMELENGTH];
    int i=0;
    int Number_entrys=0;
    int search_result=0;
    printf("How many names would you like to enter to the list?\n");
    scanf("%d",&Number_entrys);
    initialize(names,Number_entrys,i); // I guess it is use to initialize names ?!?
    search_result= search(names,Number_entrys);
    if (search_result==-1)
    {
         printf("Found no names.\n");
    }
    else
    {
       printf("Index found in position %d in the tab\n",search_result);
    }
   getch(); //not really a fan of this...
   return 0;
 }

それが役に立てば幸い。

よろしく、

ジョゼ

于 2012-10-30T21:23:33.343 に答える