简体   繁体   中英

Searching through struct array for string entered by user

This is just a function from my program that is supposed to search for the string or integer the user enters in the struct array. What I'm trying to do is add an error message and the ability to try again when that entered string or integer is not found in the struct array. It searches just fine if you enter the correct string or integer but nothing happens if you don't. I'm trying to change that but can't find the solution.

I've tried for a while now with one of the cases in my switch statement but I need to do it for all three. But so far I've only tried on case 3.

search(struct items aItems[], int *num_items)
{
    int choice_of_search, b=0, found_word=0, search_num, i=0, j=0, k=0;
    char search_phrase[20]; struct items search[MAX];

    printf("Choose what to search for? (1) Item number, (2) Name and (3) Balance. ");
    scanf("%d", &choice_of_search);

    while(choice_of_search < 1 || choice_of_search > 3)
    {
        printf("Wrong choice!\n");
        printf("Choose what to search for? (1) Item number, (2) Name and (3) Balance. ");
        scanf("%d", &choice_of_search);
    }


    switch(choice_of_search)
    {
        case 1:
            printf("Item number?\n");
            scanf("%d", &search_num);
            for(i = 0; i < *num_items; i++)
            {
                if(search_num == aItems[i].itemnumber)
                {
                    printf("Item number found!\n");
                    search[found_word]=aItems[i];
                    found_word+=1;
                }
            }
            break;

        case 2:
            printf("Name?\n");
            scanf("%s", search_phrase);
            for(i = 0; i < *num_items; i++)
            {
                if(strstr(aItems[i].name, search_phrase))
                {
                    printf("Name found!\n");
                    search[found_word]=aItems[i];
                    found_word+=1;
                }
            }
            break;

        case 3:
            printf("Balance?\n");
            scanf("%d", &search_num);
            for(i = 0; i < *num_items; i++)
            {
                if(search_num == aItems[i].balance)
                {
                    printf("Balance found!\n");
                    search[found_word]=aItems[i];
                    found_word+=1;
                }
                else
                {
                    printf("Balance not found! Try again.\n");
                    printf("Balance?\n");
                    scanf("%d", &search_num);
                }
            }
            break;
    }


    while(b < found_word)
    {
        printf("Item number: %d Name: %s  Balance: %d\n", search[b].itemnumber, search[b].name, search[b].balance);
        b++;
    }
}

Maybe this can help

int done;
...
...

    case 3:
        done = 0;
        while(1);
        {
            printf("Balance?\n");
            scanf("%d", &search_num);
            for(i = 0; i < *num_items; i++)
            {
                if(search_num == aItems[i].balance)
                {
                    printf("Balance found!\n");
                    search[found_word]=aItems[i];
                    found_word+=1;
                    done = 1;
                }
            }
            if (done) break;

            printf("Balance not found! Try again.\n");
        } 
        break;

But notice that the code isn't user friendly as it doesn't allow the user a way to stop the search without a match. So maybe you should consider adding a "Would you like try again" option.

A simple approach could be

            printf("Balance not found! Would like to try again?.\n");
            scanf(" %c", &some_char);
            if (some_char != 'y') break;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM