在C中发出返回字符串位置

时间:2012-10-29 05:02:04

标签: c string

我正在尝试编写一个程序来检查用户输入的名称列表,以查看输入的新名称是否属于列表的一部分。如果它不是列表的一部分,它应该返回-1到main,并且不打印任何名称;如果它是列表的一部分,它应返回0并打印名称的位置。

我遇到的问题是我会输入一个名称列表,然后输入要搜索的名称,除非该名称是列表中的第一个名称,否则表示找不到名称。另外,如果你看一下代码,你会注意到我正在打印“找到名字”而不是字符串位置,这只是因为我还没弄明白怎么做。非常感谢帮助解决这个困境。

#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAX_NAMELENGTH 10
#define MAX_NAMES 5
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys,int i);
int search(char names[MAX_NAMES][MAX_NAMELENGTH], int Number_entrys);
int main()
{

char names[MAX_NAMES][MAX_NAMELENGTH];
int i, Number_entrys,search_result;
 initialize(names,Number_entrys,i);
 search_result= search(names,Number_entrys);
 if (search_result==-1){
    printf("Found no names.\n");
}else{
 printf("Names found");
 }
getch();
return 0;
}

void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys,int i)
{

 printf("How many names would you like to enter to the list?\n");
 scanf("%d",&Number_entrys);

 if(Number_entrys>MAX_NAMES){
               printf("Please choose a smaller entry\n");
               }else{
  for (i=0; i<Number_entrys;i++){
 scanf("%s",names[i]);


 }
}   
}

int search(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
int x;
char new_name[MAX_NAMELENGTH];
printf("Now enter a name in which you would like to search the list for\n");

scanf("%s",new_name);

for(x = 0; x < Number_entrys; x++) 
{
if ( strcmp( new_name, names[x] ) == 0 )
{
    return x;
}

 } 
 return -1;        
}

3 个答案:

答案 0 :(得分:3)

因为你早早就打破了你的循环。这里的代码格式更好,更易于阅读。如果第一个strcmp未能返回0,则整个搜索函数将中止并返回-1;

for(x = 0; x < Number_entrys; x++)
{
     if ( strcmp( new_name, names[x] ) == 0 )
     {
        return x;
     }
     else
     {
         return -1;   
     }  
}

这是你可能想要的:

for(x = 0; x < Number_entrys; x++)
{
     if ( strcmp( new_name, names[x] ) == 0 )
     {
        return x;
     }
}
return -1;

答案 1 :(得分:0)

在函数搜索中 - 在for循环中 - 你写了if else阻塞所以,当第一次匹配不正确时它将转到else部分..

修复可以 - 允许循环完全执行,其中使用一个标志来判断是否找到匹配,如果找到,则存储x

循环后检查标志,然后返回x。

答案 2 :(得分:0)

尝试运行此代码,我刚刚删除了<conio.h>getch()如果您的编译器需要它,您可以包含它。

#include<stdio.h>
#include<string.h>

#define MAX_NAMELENGTH 10
#define MAX_NAMES 5
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys);
int search(char names[MAX_NAMES][MAX_NAMELENGTH], int Number_entrys);
int main()
{



char names[MAX_NAMES][MAX_NAMELENGTH];
int i, Number_entrys,search_result;
do
{
 printf("How many names would you like to enter to the list?\n");
 scanf("%d",&Number_entrys);
}while(Number_entrys > MAX_NAMES);

 initialize(names,Number_entrys);
 search_result= search(names,Number_entrys);
 if (search_result==-1){
    printf("Found no names.\n");
}else{
 printf("Names found");
 }

return 0;
}

void initialize(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
 int i;
 for (i=0; i<Number_entrys;i++){
 scanf("%s",names[i]);
 }
}




int search(char names[MAX_NAMES][MAX_NAMELENGTH],int Number_entrys)
{
int x;
char new_name[MAX_NAMELENGTH];
printf("Now enter a name in which you would like to search the list for\n");
scanf("%s",new_name);

for(x = 0; x < Number_entrys; x++)
{
if ( strcmp( new_name, names[x] ) == 0 )
{

    return x;
 }

 }
 return -1;
}

如果同意,那么接受答案..它在我的编译器上工作正常