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!
#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();
}
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:
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
no entendi mucho, soy nuevo en c++ ,, y bueno trate de hacer lo q me dice y me da error :s!
Cita de: rir3760 en 24 Enero 2014, 02:53 AM
El error principal se encuentra en la sentencia:
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.