使用struct的函数中的参数转换不正确

时间:2014-08-07 23:37:59

标签: c function struct arguments

我开始学习C.我在一个函数中遇到了一个问题,他最终会要求为一个新客户提供一个数据,我做的就是做一个稍微练习的议程,问题是编译器给我一个错误:

**cannot convert `char*' to `agenda*' for argument `1' to `void introducir_datos(agenda*)'** 

除了这部分之外,似乎一切都还可以。我担心这会导致char到int等问题。

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


struct agenda {
    char   nombre[20];
    char   apellido[20];
    char   direccion[20];
    int    edad;
    int    telefono;
};

int credenciales(char login[20],char password[20]);
void introducir_datos (struct agenda cliente[30]);


int main(void){
    int x=0;
    int menu, comp, submenu;
    char login[20], password[20], cliente[30];

    puts("\nBienvendio a la agenda en C\n");
    puts("\nQue quieres hacer?\n");
    puts("1)Zona de administracion\n2)Listar productos\n3)Salir\n");
    fflush(stdin);
    scanf("%d", &menu);
    switch(menu){
        case 1:
            puts("\nBienvenido a la introduccion de datos\n");
            puts("\nAntes de nada comprobaremos tus credenciales\n");
            fflush(stdin);
            while (comp != 1){
                puts("\nLogin?\n");
                scanf("%s", &login);
                puts("\nPassword?\n");
                scanf("%s", &password);
                comp=credenciales(login,password);
            }
            puts("\nBienvenido a la zona admin\n");
            puts("\n1) Introduccir clientes\n2)Listar clientes\n3)Borrar clientes\n4)Salir\n");
            fflush(stdin);
            scanf("%d", &submenu);
            switch(submenu){
                case 1:
                    introducir_datos(cliente);
                    break;
            }
    }
}

int credenciales(char login[20],char password[20]){
    int comp;

    if ((strcmp(strlwr(login),"12345") == 0) && (strcmp(strlwr(password),"admin") == 0)){
        return comp = 1;
    }
    else {
        return comp = 0;
    }
}

void introducir_datos(struct agenda cliente[30]){
    char con[3];
    int x;

    while (!strstr(con,"si")){
        puts("\nDime su nombre\n");
        scanf("%s", &cliente[x].nombre);
        puts("\nDime su apellido\n");  
        scanf("%s", &cliente[x].apellido);
        puts("\nDime su direccion\n");
        scanf("%s", &cliente[x].direccion);
        puts("\nDime su edad\n");
        scanf("%d", &cliente[x].edad);
        puts("\nDime su telefono\n"); 
        scanf("%d", &cliente[x].telefono);
        x++;
        puts("\nQuieres seguir?\n");
        gets(con);
        strlwr(con);
    }  
}

1 个答案:

答案 0 :(得分:2)

您的函数introducir_datos()声明如下:

void introducir_datos (struct agenda cliente[30]);

但是在你的嵌套switch语句中,你有这一行:

introducir_datos(cliente);

其中cliente被声明为char cliente[30]。因此,不是向introducir_datos()提供struct agenda*参数,而是给它一个char*参数。


澄清:

函数introducir_datos()期望得到一个包含30个struct agenda项的数组作为其参数。

这意味着参数类型为struct agenda*,因为您正在发送指向数组中第一个项目的指针。 (这就是数组在C中的工作方式。)

您不能使用char[]数组作为参数调用此函数,因为char[]数组由char个变量组成。 char没有nombreapellidodireccionedadtelefono成员。

因此,您的代码将无法编译,因为编译器无法弄清楚您要执行的操作。

顺便提一下,虽然您在int x;中声明变量introducir_datos(),但您不会在任何地方初始化它,因此您也需要修复它。