我有下一个代码,但是当从带有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/