2017-09-24 91 views
0

我設法搜索名稱和電話號碼。但是當for循環循環時,它也會打印「找不到名稱」。結構(搜索)

void search(Contact *p, int size, char *tsearch) 
{ 
    int i = 0; 
    for(i = 0; i < size; i++){ 
     if(strcmp(p[i].name, tsearch) == 0){ 
      printf("Name = %s, Tel = %s \n", p[i].name, p[i].telno); 
     } 
     else 
      printf("Name not found!"); 
    } 
} 

我應該在哪裏放置'printf(「Name not found!」)'?

+0

可能重複[如何顯示循環中的一個結果](https://stackoverflow.com/questions/45847535/how-to-display-one-result-in-for-loop) – melpomene

+0

或者你可以擁有一個表示搜索結果的「標誌」集合,可以檢查在「for」循環之外打印「not found」消息。或者,如果您只希望獲得一個搜索結果,則可以在結果的「printf」之後休息一下。未找到的條件將在這裏爲'i == size'。 –

回答

1

2件事。 1找到名字後停止搜索。 2.只有在根本找不到名稱的情況下才打印(不僅僅是當前單元格)。

void search(Contact *p, int size, char *tsearch) 
{ 
    int i = 0; 
    boolean found = false; 
    for(i = 0; i < size && !found; i++){ 
     if(strcmp(p[i].name, tsearch) == 0){ 
      printf("Name = %s, Tel = %s \n", p[i].name, p[i].telno); 
      found = true; 
     } 
    } 
    if (!found) 
    { 
     printf("Name not found!"); 
    } 
} 

通知我添加了一個標誌found指示值是否找到並停止循環,一旦它。而且,如果found在這一點上仍然是錯誤的,我將未找到的打印輸出到循環外部。