2017-02-11 4 views
1

i den nächsten Code haben ausführen, aber wenn man von cmd Kompilieren mit mingw Fehler angezeigt.Fehler von cmd durch mingw kompilieren, können Codeblöcke zusammenstellen und

ultimo->siguiente = producto

for(producto=primer; producto != NULL ;producto = producto->siguiente)

siguiente = este->siguiente;

Warn Zuordnung von unverträglichen pointer In diesen drei Linien zeigt die Warnung.

, was das Problem ist ?, ich das Code-Bibliotheken, string.h enthalten, stdlib.h

typedef struct Producto 
{ 
    int codigo_producto; 
    char descripcion[20]; 
    float precio_unitario; 
    struct producto *siguiente; 

} t_producto; 

float aplicar_iva(float precio_base); 
void eliminar_todo(t_producto*); 
void emitir_saludo(void); 
void imprimir_producto(t_producto); 
t_producto* leer_producto(void); 

int main() 
{ 
    t_producto *primer, *ultimo, *producto; 
    primer = NULL; 
    ultimo = NULL; 

    char decision; 
    int i, cantidad; 
    float total; 

    cantidad =0; 
    total = 0.0; 

    emitir_saludo(); 

    while(1) //while infinito 
    { 
     do 
     { 
      printf("\nHay %d productos en el carrito. ¿Quiere pasar otro producto? [s/n]: ",cantidad); 
      decision = getchar(); 
      while(getchar()==EOF); 
     }while(decision != 's' && decision != 'S' && decision != 'n' && decision != 'N'); 

     if(decision=='n' || decision == 'N') 
     { 
      break; 
     } 

     producto = leer_producto(); 
     if(primer == NULL) //si no hay ningun elemento 
     { 
      primer= producto; 
     } 
     if(ultimo != NULL) //si hay elemntos se le dice al ultimo que ya no es el ultimo 
     { 
      ultimo->siguiente = producto; 
     } 
     ultimo = producto; 
     cantidad++; 
    } 
    puts("\nPRODUCTOS:\n"); 
    for(producto=primer; producto != NULL ;producto = producto->siguiente) 
    { 
     imprimir_producto(*producto); 
     total += producto ->precio_unitario; 
    } 

    printf("\nTotal deproductos: %d\n\n",cantidad); 
    printf("Precio total sin IVA: %.2f\n",total); 
    printf("Precio total con IVA: %.2f\n",aplicar_iva(total)); 
    printf("\nBuenos dias.\n"); 

    eliminar_todo(primer); 

    return 0; 
} 

float aplicar_iva(float precio_base) 
{ 
    return precio_base * 1.21; 
} 

void emitir_saludo(void) 
{ 
    printf("\n* * * * * * * * * * * * * * * * * *"); 
    printf("\n* * PROGRAMA SUPERMERCADO * *\n"); 
    printf("* * La calidad es lo primero * *\n"); 
    printf("* * * * * * * * * * * * * * * * * *\n"); 
} 

void imprimir_producto(t_producto t) 
{ 
    printf("%d %s %f\n",t.codigo_producto,t.descripcion,t.precio_unitario); 
} 

t_producto* leer_producto(void) 
{ 
    t_producto *p; 
    p = (t_producto*)malloc(sizeof(t_producto)); 
    char entrada[80]; 

    printf("\nCodigo producto: "); 
    fgets(entrada,10,stdin); 
    if(entrada[strlen(entrada)-1] == '\n') 
    { 
     entrada[strlen(entrada)-1] = '\0'; 
    } 
    p->codigo_producto = (int) strtol(entrada,NULL,10); 

    printf("Descripcion: "); 
    fgets(p->descripcion,20,stdin); 
    if(p->descripcion[strlen(p->descripcion)-1] == '\n') 
    { 
     p->descripcion[strlen(p->descripcion)-1] = '\0'; 
    } 


    printf("Precio: "); 
    fgets(entrada,10,stdin); 
    if(entrada[strlen(entrada)-1] == '\n') 
    { 
     entrada[strlen(entrada)-1] = '\0'; 
    } 
    p->precio_unitario = strtof(entrada,NULL); 

    p->siguiente = NULL; 
    return p; 
} 

void eliminar_todo(t_producto* producto) 
{ 
    t_producto *este, *siguiente; 
    este =producto; 
    while(este!=NULL) 
    { 
     siguiente = este->siguiente; 
     este->siguiente = NULL; 
     free(este); 
     este=siguiente; 
    } 
} 

Vielen Dank im Voraus!

+0

Sie haben nicht 182 Zeilen Code in diesem Code-Snippet! – Sush

+0

'Entscheidung' sollte übrigens ein' int' sein. – paxdiablo

+0

Sieht für mich wie ein einfacher Tippfehler aus: struct Producto und struct producto sind verschiedene Typen, weil C die Groß-/Kleinschreibung unterscheidet. – Irisshpunk

Antwort

0

Sie haben nicht kompatibel Zeigertypen zu struct producto * von struct Producto *

typedef struct producto 
{ 
    int codigo_producto; 
    char descripcion[20]; 
    float precio_unitario; 
    struct producto *siguiente; 

} t_producto; 

Notiere die Klein producto statt Producto zuweisen.

+0

oooh lol XD Jetzt erkenne ich. Dank bro – EmiliOrtega