【问题标题】:Implementing a Linear Search实现线性搜索
【发布时间】:2014-06-05 17:37:14
【问题描述】:

问题: 将最多 6 对姓名和年龄读取到两个单独的数组中,并使用线性搜索来定位目标姓名并打印该人的年龄。这两个数组分别称为姓名和年龄:

我遇到很多错误..我不确定将数组传递给函数..

  #include <stdio.h>
#define ASIZE 20
#define RECSIZE 6

struct record {
    char name[ASIZE];
    int age[ASIZE];
};
struct record na[RECSIZE];

int linearSearch(struct record *a, char *find)
{
int x;
for(x=0; x<RECSIZE; x++)
{
//  if(na[x].name==find[x])
if(a->name[x]==find[x])
    {
        return x;
    }
}
return -1;
 }

int main()
{
    int i;

    for (i=0; i<RECSIZE; i++)
{
printf("Enter name: ");
scanf("%s",na[i].name);
printf("Enter age: ");
scanf("%i",&na[i].age);
}   

printf("Enter the Search name: ");
char temp[ASIZE];
scanf("%s",temp[ASIZE]);


int result;
result=linearSearch(&na, &temp[]);
printf("%i", result);
    return 0;
    }

请帮忙。

错误出现在: result=linearSearch(&na, &temp[]);

【问题讨论】:

  • 那么您希望我们做什么?您没有显示任何错误。通过查看您的代码,我建议您购买一本 C 书籍或在网上找到教程,然后阅读。
  • result=linearSearch(&na[].name, &na[].age, &temp[]);给出错误消息: ] token 之前的预期表达式
  • 1) if(na[x].name==find[x]) --> strcmp() 2) linearSearch() 呼叫搞砸了。

标签: c arrays structure parameter-passing linear-search


【解决方案1】:
#include <stdio.h>
#include <string.h>

#define ASIZE 20
#define RECSIZE 6

struct record {
    char name[ASIZE];
    int age;
};

struct record na[RECSIZE];

int linearSearch(struct record *a, char *find){
    int x;
    for(x=0; x<RECSIZE; x++){
        if(strcmp(a[x].name, find)==0)
            return x;
    }
    return -1;
}

int main(){
    int i;

    for (i=0; i<RECSIZE; i++){
        printf("Enter name: ");
        scanf("%s", na[i].name);//No protection when entered past the buffer
        printf("Enter age: ");
        scanf("%i", &na[i].age);
    }

    printf("Enter the Search name: ");
    char temp[ASIZE];
    scanf("%s", temp);

    int result;
    result=linearSearch(na, temp);
    printf("%i", result);
    return 0;
}

【讨论】:

    【解决方案2】:

    在我的系统上,编译器为您的确切代码提供了这些错误。只需查看行号(应该与您的完全相同)并通过查看错误描述来解决每个错误。一旦您解决了这些问题,您将进一步了解您的执行流程:

    【讨论】:

    • 我修改了我的代码..再次检查问题..我已经指定了我现在得到的错误...谢谢!
    • 是的,我可以通过查看编译消息的第一行来了解这一点。它告诉您操作数有问题。在这种情况下,您应该使用strcmp() 来比较字符串,而不是==。即if(strcmp(a, b) == 0){...}(为简洁起见)
    • 另外,char temp[ASIZE]; 是一个字符串,而不是字符串数组。所以 strcmp 行应该看起来像:if(strcmp(na[x].name,find)) 而不是:if(strcmp(na[x].name,find[x]))
    猜你喜欢
    • 2019-11-21
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多