Как получить все иматы, соответствующие искомому элементу - PullRequest
1 голос
/ 25 марта 2020

Функция:


    Option2(char Firstname[][20],char search[],int size)
     {
         int i;
         for(i=0;i<=size;i++)
         {
             if(strcmp(Firstname[i],search)==0)
             {
                 return i;
             }
         }
         return -1;
     }

Функция должна сравнивать результаты поиска с каждым элементом в массиве и возвращать все элементы, соответствующие поиску

main:


    case 2:
                printf("\nEnter a first name to search: ");
                scanf("%s",Nsearch);
                temp = Option2(Firstname,Nsearch,size);
                if(temp!=-1)
                {
                    printf("First Name:%s Last Name:%s Score: %.2f\n",Firstname[temp],Lastname[temp],score[temp]);
                }
                break;

Как я могу распечатать все элементы, которые соответствуют запросу, а не только первый элемент, который соответствует запросу?

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Для начала кажется, что в функции есть ошибка в условии l oop

for(i=0;i<=size;i++)

должно быть

for(i=0; i < size;i++)

Вы можете вызвать функцию в l oop like

temp = 0;
int i = 0'
while ( ( temp = Option2(Firstname + i,Nsearch, size - i) ) != - 1 )
{
    i += temp;
    printf("First Name:%s Last Name:%s Score: %.2f\n",Firstname[i],Lastname[i],score[i]);
    ++i;
}

Вот демонстрационная программа, которая показывает, как можно использовать циклы для вывода элементов, найденных в массиве.

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

#define N   20

int Option2( char Firstname[][N], char search[], int size )
{
    int i = 0;

    while ( i < size && strcmp( Firstname[i], search ) != 0 ) i++;

    return i == size ? -1 : i;
}

int main(void) 
{
    char names[][N] = { "chanu", "bob", "chanu" };
    const int M = ( int )( sizeof( names ) / sizeof( *names ) );
    char s[] =  "chanu";

    int i = 0, j = 0;

    while ( ( j = Option2( names + i, s, M - i ) ) != -1 )
    {
        i += j;

        printf( "%d: \"%s\"\n", i, names[i] );

        ++i;
    }

    putchar( '\n' );

    for ( int i = 0, j = 0; ( j = Option2( names + i, s, M - i ) ) != -1; i++ )
    {
        i += j;

        printf( "%d: \"%s\"\n", i, names[i] );
    }

    return 0;
}

Выходные данные программы

0: "chanu"
2: "chanu"

0: "chanu"
2: "chanu
1 голос
/ 25 марта 2020

Поскольку функция возвращает индекс первого совпадения, используйте его для настройки последующих поисков

    printf("\nEnter a first name to search: ");
    scanf("%s",Nsearch);

    int offset = 0;
    while (size > offset && (temp = Option2(Firstname+offset, Nsearch, size-offset) != -1)) {
      printf("First Name:%s Last Name:%s Score: %.2f\n", 
          Firstname[offset+temp], Lastname[offset+temp], score[offset+temp]);
      offset += temp + 1;
    }
    break;
...