我开始学习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);
}
}
答案 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
没有nombre
,apellido
,direccion
,edad
或telefono
成员。
因此,您的代码将无法编译,因为编译器无法弄清楚您要执行的操作。
顺便提一下,虽然您在int x;
中声明变量introducir_datos()
,但您不会在任何地方初始化它,因此您也需要修复它。