Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: reeyesg en 23 Enero 2014, 21:04 pm



Título: Pequeño inconveniente archivos/registros
Publicado por: reeyesg en 23 Enero 2014, 21:04 pm
Buenaas mis mas cordiales saludos, tngo un pequeño inconveniente con archivos y registros, ya que le doy la opcion agregar y pongo un codigo que es el q deberia mostrar en el archivo .txt, pero solo me arroja otro numero y mientras que mas voy agregando, sale el mismo numero .. aqui les dejo el codigo para ver si me podrian ayudar.. Gracias de antemano

Ejemplo; selecciono agregar equipo, me sale insertar codigo pongo "1", marca hp, caracteristicas negras.. y cuando reviso el .txt no me sale 1 si no que me sale otra serie de numeros.. y mientras añado otro se agrega cn el mismo codigo anterior mencionado.. ese es mi problema!

Código:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct datos_equipo
   {
   long codigoe;
   char marca[20];
   char caract[50];
   }equipo;

struct datos_mtto
   {
   long codigom;
   char motivo[50];
   char tipo[50];
   char area[10];
   }mtto;
void main(){
int opc;
long codigo_e;
long codigo_m;

{
clrscr();//Borrando pantalla
textcolor(WHITE);//Cambiando el color del texto
gotoxy(15,8),  cprintf("Menu de opciones");
gotoxy(10,10), cprintf("1. Agregar Equipos");
gotoxy(10,12), cprintf("2. Buscar Equipos ");
gotoxy(10,14), cprintf("3. Agregar Mantenimiento");
gotoxy(10,16), cprintf("5. Salir del Menu");
textcolor(GREEN);
gotoxy(10,20), cprintf("Que desea hacer?");
gotoxy(28,20), scanf("%i",&opc);
      textcolor(YELLOW);
      gotoxy(28,20);
switch (opc)
{

      case 1:
      FILE * eq;
      eq=fopen("equipos.txt","a");
      codigo_e= equipo.codigoe;
      printf("\n\t");
      printf("ingrese codigo de equipo:\n\t");
      scanf("%u",&equipo.codigoe);

      printf("ingrese marca:\n\t");
      scanf("%s",equipo.marca);

      printf("ingrese Caracteristicas:\n\t");
      scanf("%s",equipo.caract);

      fprintf(eq,"\n%u %s %s",&equipo.codigoe,equipo.marca,equipo.caract);

      printf("Ahora el equipo se encuentra registrado %u%s%s");

      fclose(eq);

      getch();
      break;


      case 2:
      printf("\n\tHas entrado a  buscar el equipo");
      printf("\n\t");
      printf("\n\tingrese codigo del equipo a buscar:");
      scanf("%u",&codigo_e);
      eq=fopen("equipos.txt","r");
      while(!feof(eq)){
      fscanf(eq,"%u%s%s",&equipo.codigoe,equipo.marca,equipo.caract);
      if(codigo_e==equipo.codigoe){
      printf("\n\t Equipo ncontrado :\n\t Codigo:%u\n\t Marca:%s\n\t Caracteristicas:%s\n\t",equipo.codigoe,equipo.marca,equipo.caract);
      }
      }
      fclose(eq);
      getch();
      break;


    }
   }

   getch();
   }


Título: Re: Pequeño inconveniente archivos/registros
Publicado por: rir3760 en 24 Enero 2014, 02:53 am
Lo primero que debes hacer es cambiar los nombres de los encabezados por los correctos: <iostream>, <cstdio> y <cstdlib>, cambiar la definición de la función main a "int main() ..." y evitar el uso de la biblioteca conio de Borland, las razones de ello 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).

Un error importante se encuentra en la primera llamada a scanf: utilizas "%u" para leer un valor de tipo "signed long" y eso no es correcto, en su lugar debes utilizar "%ld".

El error principal se encuentra en la sentencia:
Código
  1. fprintf(eq, "\n%u %s %s", &equipo.codigoe, equipo.marca, equipo.caract);
Al utilizar "&equipo.codigoe" el programa imprimirá el mismo valor en el archivo (la dirección en memoria de ese campo).

Un saludo


Título: Re: Pequeño inconveniente archivos/registros
Publicado por: reeyesg en 24 Enero 2014, 16:58 pm
no entendi mucho, soy nuevo en c++ ,, y bueno trate de hacer lo q me dice y me da error :s!


Título: Re: Pequeño inconveniente archivos/registros
Publicado por: reeyesg en 24 Enero 2014, 17:12 pm


El error principal se encuentra en la sentencia:
Código
  1. fprintf(eq, "\n%u %s %s", &equipo.codigoe, equipo.marca, equipo.caract);
Al utilizar "&equipo.codigoe" el programa imprimirá el mismo valor en el archivo (la dirección en memoria de ese campo).

Un saludo


Listo mano, ese era el problema un millon de gracias ya solucione :$ ;-) :D.