Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Don';我不知道如何调用函数_C_Pointers_Struct - Fatal编程技术网

C Don';我不知道如何调用函数

C Don';我不知道如何调用函数,c,pointers,struct,C,Pointers,Struct,我正在用C编写一个使用指针和结构的搜索函数。可以使用名为contatcs的数组按名称进行搜索,该数组有十个条目。阵列已初始化和填充,并按预期工作 我试图通过重组代码来解决这个问题,但这只会让事情变得更糟。也许在设计逻辑中有一些我找不到的缺陷 typedef struct { char streetname[150]; char city[50]; int zipcode; }address; typedef struct { char name[50];

我正在用C编写一个使用指针和结构的搜索函数。可以使用名为
contatcs
的数组按名称进行搜索,该数组有十个条目。阵列已初始化和填充,并按预期工作

我试图通过重组代码来解决这个问题,但这只会让事情变得更糟。也许在设计逻辑中有一些我找不到的缺陷

typedef struct
{
    char streetname[150];
    char city[50];
    int zipcode;
}address;

typedef struct
{
    char name[50];
    int age;
    address homeaddress;
}person;

int search (char* name, person *contacts, int size);

[...] // initialization and population of array omitted

int search (char *name, person *contacts, int size)
{
    int i;
    printf("Input name: ");
    char userin = scanf("%s", name);

    for(i = 0; i < size; i++)
    {
        if (strcmp(contacts[i].name, &userin) == 0)
        {
            printf("Name: %s;", contacts[i].name);
            printf(" Age: %d;", contacts[i].age);
            printf(" Adress: %s, ", contacts[i].homeaddress.streetname);
            printf("%s, ", contacts[i].homeaddress.city);
            printf("%d\n", contacts[i].homeaddress.zipcode);
        }
    }
    return 0;
}
typedef结构
{
char streetname[150];
查尔城[50];
int-zipcode;
}地址;
类型定义结构
{
字符名[50];
智力年龄;
地址家庭地址;
}人;
整数搜索(字符*姓名、人员*联系人、整数大小);
[…]//省略了数组的初始化和填充
整数搜索(字符*姓名、人员*联系人、整数大小)
{
int i;
printf(“输入名称:”);
char userin=scanf(“%s”,名称);
对于(i=0;i
我只是想调用这个函数。但每次我试着这么做,它就是不起作用。我知道这个问题很基本,但我似乎找不到解决办法;
char userin = scanf("%s", name);

    for(i = 0; i < size; i++)
    {
        if (strcmp(contacts[i].name, &userin) == 0)
对于(i=0;i 不能将
strcmp
char
一起使用,
userin
必须是以NUL结尾的
char
数组


正如@JohnBollinger在评论中指出的,您似乎想要比较
名称
,而不是
scanf

的结果,userin是一个字符,而不是一个字符串。strcmp()很可能会以&userin作为arg失败,“只是不工作”只是没有信息。您的程序编译失败了吗(用什么诊断)?它在运行时是否失败(具有什么特定的可观察行为)?程序是编译的。它只是忽略了函数调用,所以我猜调用不起作用。我不能使用调试模式,因为它在CLion with Visual Studio中不受支持。所以我完全没有关于它为什么不起作用的信息。我所能看到的是它不起作用。如果程序实际上不调用函数,那么问题就出在代码中您忽略了调用出现的位置。请提供一个复制该问题的选项,而不仅仅是您认为相关的摘录。@MichaelPrammer,我相信bruno的观点是,您的搜索函数(如所示)不会返回零以外的任何值,因此其返回值不会向调用方传递任何可操作的信息。特别是,它不会告诉您是否有任何结果,因为0是以任何方式返回的。如果您确实不打算返回其他值,那么将函数声明为不返回任何值(
void
),并且根本不返回任何值。此外,
userin
似乎不太可能是OP首先想要比较的对象。似乎他们实际上想要
strcmp(联系人[i]。姓名,姓名)
。好吧。看来我的搜索功能是垃圾。这并不让我感到惊讶,因为我充其量只是一个编程新手。但CLion并不抱怨,只是编译。所以可能范围被破坏了,这就是为什么我的函数调用也会丢失的原因。所以我将检查这一点作为答案,我们可以关注其他方面。