首页 > 解决方案 > 如何获取与正在搜索的项目匹配的所有 itams

问题描述

功能:


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

该函数应该将搜索与数组上的每个项目进行比较,并返回与搜索匹配的所有项目

主要的:


    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;

如何打印出与搜索匹配的所有项目,而不仅仅是与搜索匹配的第一个项目?

标签: cloopsfor-loopwhile-loopc-strings

解决方案


对于初学者来说,函数似乎在循环条件中有一个错误

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

它应该是

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

您可以像这样在循环中调用函数

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

推荐阅读