簡體   English   中英

在結構數組中搜索用戶輸入的字符串

[英]Searching through struct array for string entered by user

這只是我程序中的一個函數,應該搜索用戶在struct數組中輸入的字符串或整數。 我正在嘗試做的是添加一條錯誤消息,並且當在結構數組中找不到所輸入的字符串或整數時可以再次嘗試的功能。 如果您輸入正確的字符串或整數,它的搜索就很好,但是如果沒有輸入,則什么也不會發生。 我正在嘗試更改它,但找不到解決方案。

我已經在switch語句中嘗試了一種情況,但已經嘗試了一段時間,但我需要對這三種情況都進行此操作。 但是到目前為止,我僅嘗試了案例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++;
    }
}

也許這可以幫助

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;

但是請注意,該代碼不是用戶友好的代碼,因為它不允許用戶在沒有匹配項的情況下停止搜索。 因此,也許您應該考慮添加“您想重試”選項。

一個簡單的方法可能是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM