我有下一个代码,但是当从带有mingw错误的cmd编译时会出现错误。
ultimo->siguiente = producto
for(producto=primer; producto != NULL ;producto = producto->siguiente)
siguiente = este->siguiente;
这三行中不兼容指针的警告赋值显示警告。
怎么了?,我包括了代码库,string.h,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;
    }
}

提前谢谢!

最佳答案

struct producto *分配给struct Producto *的指针类型不兼容

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

} t_producto;

注意小写的producto,而不是Producto

关于c - 通过mingw从cmd编译时出错,代码块可以编译并执行它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42171744/

10-15 01:27