1

ユーザーが入力した名前のリストをチェックして、入力された新しい名前がリストの一部であるかどうかを確認するプログラムを作成しようとしています。リストに含まれていない場合は、メインに -1 を返して、名前が見つからないことを出力する必要があります。リストの一部である場合は、0 を返し、名前の位置を出力する必要があります。

私が抱えている問題は、名前のリストを入力してから検索する名前を入力すると、その名前がリストの最初の名前でない限り、名前が見つからないということです。また、コードを見ると、文字列の位置ではなく「名前が見つかりました」と出力していることに気付くでしょう。これは単に、その方法がまだわかっていないためです。このジレンマの助けをいただければ幸いです。

#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;
 initialize(names,Number_entrys,i);
 search_result= search(names,Number_entrys);
 if (search_result==-1){
    printf("Found no names.\n");
}else{
 printf("Names found");
 }
getch();
return 0;
}

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

 printf("How many names would you like to enter to the list?\n");
 scanf("%d",&Number_entrys);

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

3 に答える 3

3

早い段階で for ループから抜け出しているからです。これは、より適切にフォーマットされ、読みやすいコードです。最初の strcmp が 0 を返さない場合、検索関数全体が中止され、-1 が返されます。

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

これはおそらくあなたが望むものです:

for(x = 0; x < Number_entrys; x++)
{
     if ( strcmp( new_name, names[x] ) == 0 )
     {
        return x;
     }
}
return -1;
于 2012-10-29T05:09:09.700 に答える
0

関数検索 - for ループ - で if else ブロックを書いたので、最初の一致が正しくない場合は else 部分に移動します..

修正することができます - 一致が見つかったかどうかを判断するためにフラグを使用するという点で、ループが完全に実行されるようにし、見つかった場合は x を保存します。

ループの後、フラグをチェックし、それに応じて x を返します。

于 2012-10-29T05:12:48.700 に答える
0

実行中のこのコードを試してください。削除<conio.h>したばかりgetch()で、コンパイラが必要とする場合は含めることができます。

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

#define MAX_NAMELENGTH 10
#define MAX_NAMES 5
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys);
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;
do
{
 printf("How many names would you like to enter to the list?\n");
 scanf("%d",&Number_entrys);
}while(Number_entrys > MAX_NAMES);

 initialize(names,Number_entrys);
 search_result= search(names,Number_entrys);
 if (search_result==-1){
    printf("Found no names.\n");
}else{
 printf("Names found");
 }

return 0;
}

void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
 int i;
 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;
}

同意する場合は、答えを受け入れてください..コンパイラで正常に動作しています

于 2012-10-29T05:41:48.457 に答える