2017-09-24 84 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在这一点上仍然是错误的,我将未找到的打印输出到循环外部。