Autor
|
Tema: Ayuda con Cola en C (sencillo) (Leído 20,199 veces)
|
Adry89
Desconectado
Mensajes: 4
|
Bueno, pues me da 4 o 5 errores azules de incompatibilidad de tipos sobre todo y no sé que falla, el programa es muy sencillo de 200 líneas...a ver si me podéis ayudar, estoy desesperada =( #include <stdio.h> #include <stdlib.h>
/*declaracion de la cola*/
typedef struct _DATOS { char nombre[20]; char apellidos[30]; char telefono[12]; char movil[12]; int edad;
}DATOS;
struct nodo {
int elemento;
struct nodo *siguiente;
};
typedef struct nodo Nodo;
typedef struct {
Nodo *frente;
Nodo *final;
}Cola;
/*Prototipos de funciones*/
void crearcola(Cola *cola); void insertar (Cola *cola, int x); int borrar (Cola *cola); int estavacia (Cola cola);
int main(void) {
/*Declaracion de variables locales*/
Nodo *lista; int num; DATOS dat;
/*Algoritmo*/
lista = crearcola ();
do {
printf("--------------------------------\n\n"); printf("Bienvenido a la agenda del movil \n\n"); printf("elige una opcion : \n\n"); printf("1.-Añadir. \n"); printf("2.-Borrar.\n"); printf("4.-Salir.\n");
printf("Su opcion es: "); scanf("%d",&num);
switch(num) {
case 1 : printf("Introduce los valores del dato"); dat = leer (); lista = insertar (dat, lista); break;
case 2 : borrar (dat, lista); break;
case 3 : break;
default : printf("Error: Introduce un numero del menu");
}
}while(num!=3);
return(0);
}
/*definicion de las funciones*/
DATOS leer ( void ) {
/*Declaracion de variables locales*/
DATOS d;
/*Algoritmo*/
printf("Introduce Nombre: "); scanf("\n%s", d.nombre); printf("Introduce Apellido: "); scanf("\n%s",d.apellidos); printf("Introduce Telefono: "); scanf("\n%s",d.telefono); printf("Introduce Movil: "); scanf("\n%s",d.movil); printf("Introduce Edad: "); scanf("%d",&d.edad);
return(d); }
void CrearCola(Cola *cola)
{
cola->frente=cola->final=NULL;
}
/*funcion que inserta el dato en la parte final de la cola*/
void insert (Cola *cola, int x)
{
Nodo *nuevo;
nuevo=(Nodo*)malloc(sizeof(Nodo));
nuevo->elemento=x;
nuevo->siguiente=NULL;
if(empty(*cola))
{
cola->frente=nuevo;
}
else
cola->final->siguiente=nuevo;
cola->final=nuevo;
}
/*elimina el elemento que esta aL frente de la cola*/
int remover (Cola *cola)
{
int temp=NULL;
if(!empty(*cola))
{
Nodo *nuevo;
nuevo=cola->frente;
temp=cola->frente->elemento;
cola->frente=cola->frente->siguiente;
free(nuevo);
}
else
printf("ERROR, cola vacia, se puede eliminar\a\n");
return (temp);
}
int empty(Cola cola)
{
return (cola.frente==NULL);
}
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Algunos errores a simple vista... La funcion crearcola() devuelve void, por lo tanto asignarla a una variable es erroneo default: printf("Error: Introduce un numero del menu"); Te falta poner break; leer(void) remover(Cola *cola) empty(Cola cola) Te falta definir el prototipo de estas funciones Mmmm no hay ninguna definicion de esta funcion void crearcola(Cola *cola); // prototipo void CrearCola(Cola *cola) {} // definicion No concuerdan el nombre puesto en el prototipo de la funcion con el nombre en la definicion. Acordate que C es un lenguaje case sensitive. Salu10.
|
|
|
En línea
|
|
|
|
Adry89
Desconectado
Mensajes: 4
|
Corregido todo eso los fallos azules siguen apareciendo, no tiene nada que ver con lo que has dicho =(
|
|
|
En línea
|
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
default no lleva break nicolas...
Saludos...
|
|
|
En línea
|
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
Estas llamando funciones sin pasarle parámetros cuando en los prototipos y definiciones especificas los parámetros necesarios para la correcta ejecución de dicha funcion. Por otro lado, los errores de incompatibilidad radican en utilizar en forma errónea los tipos de datos que declaraste. Por ejemplo, en esta función que declaraste: void insertar (Cola *cola, int x);
La llamas así: insertar (dat, lista);
donde dat y lista son: DATOS dat; Nodo *lista;
Todo esto sumado a los errores que ya mencionaron, como por ejemplo asignar el retorno de una función como dato útil cuando en el prototipo esta declarada como void. Si solucionaste todos los errores mencionados, vuelve a postear el código. [code=c]código[/code] Repasa atentamente el manejo de funciones y estructuras. Saludos!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Corregido todo eso los fallos azules siguen apareciendo, no tiene nada que ver con lo que has dicho =( Mmmmm en ningun momento te asegure que corrigiendo esos errores, los "fallos azules" iban a desaparecer Estaria bueno que pongas en el post esos "fallos azules" de los que hablas Salu10.
|
|
|
En línea
|
|
|
|
Adry89
Desconectado
Mensajes: 4
|
Muchas gracias a todos por las respuestas. He corregido todo y esto es lo que falla: hdrhdrh.c:69: error: incompatible types in assignment hdrhdrh.c:89: error: incompatible type for argument 2 of `insertar' hdrhdrh.c:89: error: incompatible types in assignment hdrhdrh.c:185: error: incompatible type for argument 1 of `estavacia' hdrhdrh.c:192: warning: assignment makes pointer from integer without a cast hdrhdrh.c:204: error: incompatible types in return Adjunto el código de nuevo: #include <stdio.h> #include <stdlib.h> #define TAM 30 #define TRUE 1 #define FALSE 0
/*declaracion de la cola*/
typedef struct _DATOS { char nombre[20]; char apellidos[30]; char telefono[12]; char movil[12]; int edad;
}DATOS;
struct nodo {
int elemento;
struct nodo *siguiente;
};
typedef struct nodo Nodo;
typedef struct {
Nodo *frente;
Nodo *final;
}Cola;
/*Prototipos de funciones*/
Nodo crearcola(Cola *cola); Nodo insertar (Cola *cola, int x); Nodo borrar (Cola *cola); int estavacia (Cola cola); DATOS leer ( void );
int main(void) {
/*Declaracion de variables locales*/
Nodo *lista; int num; DATOS dat; Cola *cola;
/*Algoritmo*/
lista = crearcola (cola);
do {
printf("--------------------------------\n\n"); printf("Bienvenido a la agenda del movil \n\n"); printf("elige una opcion : \n\n"); printf("1.-Añadir. \n"); printf("2.-Borrar.\n"); printf("4.-Salir.\n");
printf("Su opcion es: "); scanf("%d",&num);
switch(num) {
case 1 : printf("Introduce los valores del dato"); dat = leer (); lista = insertar (cola,dat); break;
case 2 : borrar (cola); break;
case 3 : break;
default : printf("Error: Introduce un numero del menu");
}
}while(num!=3);
return(0);
}
/*definicion de las funciones*/
DATOS leer ( void ) {
/*Declaracion de variables locales*/
DATOS d;
/*Algoritmo*/
printf("Introduce Nombre: "); scanf("\n%s", d.nombre); printf("Introduce Apellido: "); scanf("\n%s",d.apellidos); printf("Introduce Telefono: "); scanf("\n%s",d.telefono); printf("Introduce Movil: "); scanf("\n%s",d.movil); printf("Introduce Edad: "); scanf("%d",&d.edad);
return(d); }
Nodo crearcola(Cola *cola)
{
cola->frente=cola->final=NULL;
}
/*funcion que inserta el dato en la parte final de la cola*/
Nodo insertar (Cola *cola, int x)
{
Nodo *nuevo;
nuevo=(Nodo*)malloc(sizeof(Nodo));
nuevo->elemento=x;
nuevo->siguiente=NULL;
if(estavacia(*cola))
{
cola->frente=nuevo;
}
else
cola->final->siguiente=nuevo;
cola->final=nuevo;
}
/*elimina el elemento que esta aL frente de la cola*/
Nodo borrar (Cola *cola)
{
Nodo *temp; Nodo *nuevo;
temp = NULL;
if(!estavacia(cola))
{
nuevo=cola->frente;
temp=cola->frente->elemento;
cola->frente=cola->frente->siguiente;
free(nuevo);
}
else
printf("ERROR, cola vacia, se puede eliminar\a\n");
return (temp);
}
int estavacia (Cola cola)
{ int resp;
if (cola.frente == NULL) { resp = TRUE; } else { resp = FALSE; }
return (resp);
}
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Seguis teniendo el error que te explico Littlehorse
Salu10.
|
|
« Última modificación: 30 Mayo 2010, 23:18 pm por nicolas_cof »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
El código mantiene errores similares al código inicial. Presta atención a los mensajes de error: 69: incompatible types in assignment lista = crearcola (cola);
Que es lista? que devuelve crearcola? el prototipo que declaraste es: Nodo crearcola(Cola *cola);
Como veras, si lo analizas minuciosamente te darás cuenta que estas cometiendo un error. (204: error: incompatible types in return) Si vas a devolver una referencia, la función debe ser similar a: Nodo* crearcola(Cola *cola)
O bien puedes hacer algo como: typedef struct nodo* Nodo;
pero por supuesto si haces esto ultimo tienes que tener cuidado cuando declaras un puntero a nodo en las funciones (ya que no necesitas el asterisco) Como recomendación déjame decirte que vas a tardar menos repasando punteros, estructuras y funciones, que arreglando el código. Repasa y replantea el ejercicio y veras que es mas fácil de lo que parece.
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Adry89
Desconectado
Mensajes: 4
|
Pues me quedan estos 5 fallos : hdrhdrh.c:59: error: incompatible types in assignment hdrhdrh.c:79: error: incompatible types in assignment hdrhdrh.c:175: error: incompatible type for argument 1 of `estavacia' hdrhdrh.c:182: error: incompatible types in assignment hdrhdrh.c:194: error: incompatible types in return Littlehorse, la verdad es que soy bastante novata y no entiendo bien lo que has dicho, sería mucho pedir si me poesn lo que queda de código como le harías tu? Gracias. #include <stdio.h> #include <stdlib.h> #define TAM 30 #define TRUE 1 #define FALSE 0
/*declaracion de la cola*/
typedef struct _DATOS { char nombre[20]; char apellidos[30]; char telefono[12]; char movil[12]; int edad;
}DATOS;
struct nodo {
DATOS elemento;
struct nodo *siguiente;
};
typedef struct nodo Nodo;
typedef struct {
Nodo *frente;
Nodo *final;
}Cola;
/*Prototipos de funciones*/
Nodo crearcola(Cola *cola); Nodo insertar (Cola *cola, DATOS x); Nodo borrar (Cola *cola); int estavacia (Cola cola); DATOS leer ( void );
int main(void) {
/*Declaracion de variables locales*/
Nodo *lista; int num; DATOS dat; Cola *cola;
/*Algoritmo*/
lista = crearcola (cola);
do {
printf("--------------------------------\n\n"); printf("Bienvenido a la agenda del movil \n\n"); printf("elige una opcion : \n\n"); printf("1.-Añadir. \n"); printf("2.-Borrar.\n"); printf("4.-Salir.\n");
printf("Su opcion es: "); scanf("%d",&num);
switch(num) {
case 1 : printf("Introduce los valores del dato"); dat = leer (); lista = insertar (cola,dat); break;
case 2 : borrar (cola); break;
case 3 : break;
default : printf("Error: Introduce un numero del menu");
}
}while(num!=3);
return(0);
}
/*definicion de las funciones*/
DATOS leer ( void ) {
/*Declaracion de variables locales*/
DATOS d;
/*Algoritmo*/
printf("Introduce Nombre: "); scanf("\n%s", d.nombre); printf("Introduce Apellido: "); scanf("\n%s",d.apellidos); printf("Introduce Telefono: "); scanf("\n%s",d.telefono); printf("Introduce Movil: "); scanf("\n%s",d.movil); printf("Introduce Edad: "); scanf("%d",&d.edad);
return(d); }
Nodo crearcola(Cola *cola)
{
cola->frente=cola->final=NULL;
}
/*funcion que inserta el dato en la parte final de la cola*/
Nodo insertar (Cola *cola, DATOS x)
{
Nodo *nuevo;
nuevo=(Nodo*)malloc(sizeof(Nodo));
nuevo->elemento=x;
nuevo->siguiente=NULL;
if(estavacia(*cola))
{
cola->frente=nuevo;
}
else
cola->final->siguiente=nuevo;
cola->final=nuevo;
}
/*elimina el elemento que esta aL frente de la cola*/
Nodo borrar (Cola *cola)
{
Nodo *temp; Nodo *nuevo;
temp = NULL;
if(!estavacia(cola))
{
nuevo=cola->frente;
temp=cola->frente->elemento;
cola->frente=cola->frente->siguiente;
free(nuevo);
}
else
printf("ERROR, cola vacia, se puede eliminar\a\n");
return (temp);
}
int estavacia (Cola cola)
{ int resp;
if (cola.frente == NULL) { resp = TRUE; } else { resp = FALSE; }
return (resp);
}
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda en cola
Programación C/C++
|
josue_tux
|
0
|
1,933
|
26 Junio 2011, 06:47 am
por josue_tux
|
|
|
[Ayuda] Ejercicio sencillo en C
Programación C/C++
|
Torino10
|
7
|
4,336
|
25 Abril 2012, 18:44 pm
por Torino10
|
|
|
Ayuda con Código Sencillo
Java
|
LaLakers94
|
5
|
3,133
|
9 Noviembre 2013, 21:00 pm
por Mitsu
|
|
|
ayuda cola circular
Programación C/C++
|
edo908458
|
1
|
2,663
|
31 Marzo 2016, 20:22 pm
por LaiaxanIV
|
|
|
Ayuda con 2 métodos de cola:
Programación General
|
JVerbal
|
0
|
1,999
|
21 Octubre 2018, 00:29 am
por JVerbal
|
|