Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xcution en 28 Octubre 2013, 01:27 am



Título: Buenas Noches, necesito ayuda con estos Warning's
Publicado por: Xcution en 28 Octubre 2013, 01:27 am
Hola, me encantarían que me ayudaran a solucionar los Warning's de este programa es de urgencia, por favor y gracias de antemano.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
   {
      char nombre[50];
      char cantidad[50];
      int codigo;
      struct listado* siguiente;
      
   } listado;

listado* primero = NULL;
listado* ultimo = NULL;

void aumentar(listado* producto)
{
   producto->siguiente = NULL;
   if(primero == NULL)
   {
      
      primero = producto;
      ultimo = producto;
   }else
      {
         ultimo->siguiente = producto;
         ultimo == producto;   
      }
}

void agregarlistado(){
   char avanzar = 's';
   while(avanzar == 's'){
      
      system("cls");
      listado* producto = NULL;   
      char nombre[50];
      char cantidad[50];
      int codigo;
      printf("C%cdigo del Producto : ",162);
      scanf("%i",&codigo);
      printf("Nombre del Producto : ");
      fflush(stdin);
      gets(nombre);
      printf("Cantidad a elegir : ");
      fflush(stdin);
      gets(cantidad);
      producto = malloc(sizeof(listado));
      producto->codigo = codigo;
      strcpy(producto->nombre, nombre);
      strcpy(producto->cantidad, cantidad);
      aumentar(producto);
      printf("\n Si desea agregar otro producto presione S de lo contrario presione N (S%c/No) : ",161);
      fflush(stdin);
      scanf("%c", &avanzar);
   }
   printf("\nPresione la tecla Enter para volver al men%c del listado de compras\n", 163);
   printf("Presione la tecla ESC para salir\n");
}

void eliminar(){
   
   listado *borrar;
   listado *atras = NULL;
   borrar = primero;
   int suprimir;
   printf("\nIntroduzca el c%cdigo del producto que ser%c eliminado\n",162,160);
   scanf("%i", &suprimir);
   
   while(borrar != NULL && borrar->codigo != suprimir){
      atras = borrar;
      borrar = borrar->siguiente;
   }
   if(borrar == NULL){
      printf("El producto que est%c buscando no se encuentra disponible en estos momentos, 160");
   }else if (atras == NULL){
      primero = primero->siguiente;
      free(borrar);
      
   }else{
      atras->siguiente = borrar->siguiente;
      free(borrar);
   }
   
}

void abrir(){
   system("cls");
   char _eliminar = 's';
   listado* i = primero;   
   if(primero != NULL){
      
      while(i != NULL)
      {
         printf("C%cdigo del producto: %i\nNombre del producto: %s\nCantidad a elegir: %s\n",162,i->codigo, i->nombre, i->cantidad);
         i = i-> siguiente;
      }
      
      printf("\n Si desea eliminar alg%cn producto presione S de lo contrario presione N (S%c/No) ",163,161);
      fflush(stdin);
      scanf("%c", &_eliminar);
      if (_eliminar = 's'){
         eliminar();
         abrir();
      }
      
   }else{
      printf("La lista se encuentra est%c vac%ca\n",160, 161);
   }
}
void gestor(){
   system("cls");
   printf("               Bienvenido al Gestor de Listado de Compras\n\n\n" );
   printf("1-.Insertar un producto a la lista. \n");
   printf("2-.Desplegar lista y/o eliminar elemento. \n");
   printf("3-.Presione 3 para salir. \n");
   printf("Elija una opci%cn => \n",162);
   
   }
int main(){
   do{
      gestor();
      int compras;   
      scanf("%i",&compras);
      if(compras==3){
         break;
      }
      switch(compras){
      case 1:
         agregarlistado();
         break;
      case 2:
         abrir();
         printf("\nSi desea volver atr%cs presione ENTER\n", 160);
         printf("Si desea salir presione la tecla ESC\n");
         break;
      }
   }
   while(getch()!= (char)30);
   system("pause");
   return EXIT_SUCCESS;
}   


Título: Re: Buenas Noches, necesito ayuda con estos Warning's
Publicado por: rir3760 en 28 Octubre 2013, 02:43 am
* Para empezar deberías evitar el uso de fflush(stdin), gets y la biblioteca conio de Borland, las razones se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

* La declaración del alias "listado" esta mal, debería ser:
Código
  1. typedef struct listado /* <== */ {
  2.   char nombre[50];
  3.   char cantidad[50];
  4.   int codigo;
  5.   struct listado *siguiente; /* <== */
  6. } listado;

* En la función "aumentar" en esta sentencia:
Código
  1. ultimo == producto;
Utilizas el operador de comparación "==" cuando debería ser el de asignación "=".

* En la función "eliminar" en la sentencia:
Código
  1. printf("El producto que est%c buscando no se encuentra disponible en estos momentos, 160");
Tienes mal colocada la comilla doble de cierre.

* Falta incluir el encabezado para tener acceso a las funciones de conio como getch, de nuevo lo mejor es evitar su uso.

* Agrega los prototipos de todas las funciones al principio del programa, antes de cualquier definición.

Una vez realices todos esos cambios el programa debe compilar sin generar mensajes de advertencia.

Un saludo


Título: Re: Buenas Noches, necesito ayuda con estos Warning's
Publicado por: Xcution en 28 Octubre 2013, 04:52 am
* Para empezar deberías evitar el uso de fflush(stdin), gets y la biblioteca conio de Borland, las razones se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

* La declaración del alias "listado" esta mal, debería ser:
Código
  1. typedef struct listado /* <== */ {
  2.   char nombre[50];
  3.   char cantidad[50];
  4.   int codigo;
  5.   struct listado *siguiente; /* <== */
  6. } listado;

* En la función "aumentar" en esta sentencia:
Código
  1. ultimo == producto;
Utilizas el operador de comparación "==" cuando debería ser el de asignación "=".

* En la función "eliminar" en la sentencia:
Código
  1. printf("El producto que est%c buscando no se encuentra disponible en estos momentos, 160");
Tienes mal colocada la comilla doble de cierre.

* Falta incluir el encabezado para tener acceso a las funciones de conio como getch, de nuevo lo mejor es evitar su uso.

* Agrega los prototipos de todas las funciones al principio del programa, antes de cualquier definición.

Una vez realices todos esos cambios el programa debe compilar sin generar mensajes de advertencia.

Un saludo

Muchísimas gracias hermano!!!!!.. pero una cosa he cambiado a getchar y cuando intento darle a la opción 2 no me entra, pero si tengo getch sí me funciona!! me encantaría que me des una ayudita ahí es que soy nuevo en esto de C.

Me refiero a esto, cuando intento entrar a la lista sin tener nada con getch si me entra, pero si cambio getch por getchar en el while no me deja entrar.
(http://i44.tinypic.com/jl1pmu.jpg)