c - 从cmd通过mingw编译报错,codeblocks可以编译执行

标签 c

我有下一个代码,但是当从 cmd 编译时出现 mingw 错误。

ultimo->siguiente = producto

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

siguiente = este->siguiente;

warning assignment from incompatible pointer 在这三行中显示警告。

有什么问题?我包含了代码库,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 - 从cmd通过mingw编译报错,codeblocks可以编译执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42171744/

相关文章:

更改指针地址 - 函数

c - 已经启动了多少个控制台应用程序副本

c - 为什么这个for循环不执行?

c - 如何在 C 中返回一个矩阵(包括代码)

在c中创建结构

c - 在打开的文件句柄上调用 CloseHandle 是否也意味着 FlushFileBuffers?

c - 为什么 `realloc()` 在某些神秘输入上失败?

c - 使用带有 MPI 的 master-worker 时,哪个大小的 block 将产生最佳性能?

c - 从数组中添加/删除元素

c - 在 C 中调用函数时\是什么意思?