簡體   English   中英

搜索功能可能返回雙值

[英]search function double return value possible

我正在寫一個搜索功能。 參數為:

(char *array, char to_find)

char search (char *array, char to_find)
{
int counter;
for (counter =0; array[counter]!='\0'; counter++)
{ if (to_find==array[counter])
  return 2; 
else return 0;
}
}

int main()
{
char *word[100]="woman";
char letter;
scanf("%c" &letter);
if (search(word, letter)==1)
{ 
printf("match")}

}

我想知道是否也可以修改此代碼以返回2個值; 如果為true,則返回1和計數器。 例如,我嘗試過:

    char search (char *array, char to_find)
    {
    int counter;
    for (counter =0; array[counter]!='\0'; counter++)
    { if (to_find==array[counter])
      return 2; 
    else return 0;

    }
    }
char searchindex(char *array, char to_find)
{ int counter;
for (counter=0; array[counter]!='\0'; counter++)
{
if (to_find==array[counter])
{
return counter;
}
else return -1;
}



int main()
    {
    char *word[100]="woman";
    char letter;
    int position;
    scanf("%c" &letter);

    /**I tried representing the return values as integers**/
int test1= search(word, letter);
int test2= searchindex(word, letter);
if ((test1+test2)>0) 
{printf(match);} /**this had errors but i can't seem to find them**/
    }

首先請注意,您的if-else語句似乎很奇怪。 你有:

char search (char *array, char to_find)
{
    int counter;
    for (counter =0; array[counter]!='\0'; counter++)
    { 
        if (to_find==array[counter])
            return 2; 
        else return 0;  // This strange....
    }

}

這意味着您將始終在第一次比較后返回。 您可能想要:

char search (char *array, char to_find)
{
    int counter;
    for (counter =0; array[counter]!='\0'; counter++)
    { 
        if (to_find==array[counter])
            return 2; 
    }
    return 0;
}

然后您問:

…可以修改此代碼以返回2個值

不,在C語言中,只能直接返回一個值。 但是,有很多方法可以“返回”多個值。

例如,通過將指針傳遞給變量,然后使用指針更改值。 喜歡:

char search (char *array, char to_find, int* counter)
{
    for (*counter = 0; array[*counter]!='\0'; (*counter)++)
    { 
        if (to_find==array[*counter])
            return 2; 
    }    
    return 0;
}

// Call it like
int counter;
int test1= search(word, letter, &counter);

另一種方法是制作一個結構並返回該結構。 喜歡:

struct X {
    int result;
    int counter;
};

struct X search (char *array, char to_find)
{
    struct X res;
    for (res.counter = 0; array[res.counter]!='\0'; res.counter++)
    { 
        if (to_find==array[res.counter])
        {
            res.result = 2;
            return res;
        } 
    }    
    res.result = 0;
    return res;
}

// Call it like
struct X test1= search(word, letter, &counter);

暫無
暫無

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

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