elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA lectura de fiche en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA lectura de fiche en c  (Leído 1,930 veces)
J.cE

Desconectado Desconectado

Mensajes: 13


Ver Perfil
AYUDA lectura de fiche en c
« en: 11 Mayo 2014, 07:27 am »

como estan amigos
estoy aprendiendo c y
quisera pedirles ayuda con este codigo por favor
se ve largo pero esta facil
lee un fichero llamado "destinos.dat"
y muestra en pantalla lo que esta en ese fichero
el problema es que no lo esta leyendo correctamente
y al final pide que ingreses un numero entre 1 y 5
cuando lo ingresas se genera una violacion de segmento
espero me puedan ayudar con eso, ya le estuve dando vueltas todo el dia al problema

Código:
#include <stdio.h>
/*ESTRUCTURAS-------------------------------------------------------------------*/
typedef struct
{
int cantidad_dias;
int divisas;
}n_dias;

typedef struct
{
int codigo;
n_dias dia[2];
int tamano;
}destinos;
/*PROTOTIPO DE FUNCION----------------------------------------------------------*/
int codigo_destino(destinos r_des[]);
/*ALGORITMO PRINCIPAL-----------------------------------------------------------*/
int main()
{
destinos destino[4];
int seleccion;
seleccion = codigo_destino(destino);
printf("%d seleccion",seleccion);
return 0;
}
/*FUNCION CODIGO_DESTINO--------------------------------------------------------*/
int codigo_destino(destinos r_des[])
{
FILE *destinos;
int i, k, c;
char paises[300];

destinos = fopen("destinos.dat","r");
if(destinos == NULL)
puts("ERROR al abrir el archivo destinos.dat");
else
{
puts("\nseleccione un codigo de destino de la lista");
puts("---------------------------------------------");
k=0;
while(!feof(destinos) && k<5)
{
fscanf(destinos,"%d\n", &r_des[k].codigo);
printf("\nCodigo %d \n", r_des[k].codigo);
puts("-------------------------------------------------");
fscanf(destinos,"%[a-zA-Z, ]\n", paises);
puts(paises);
for(i=0; i<3; i++)
{
fscanf(destinos,"%d %d\n", &r_des[k].dia[i].cantidad_dias, &r_des[k].dia[i].divisas);
r_des[k].tamano = i+1;
printf("Dias del viaje: %d\tcantidad de divisas: %d\n", r_des[k].dia[i].cantidad_dias, r_des[k].dia[i].divisas);
}
puts("-------------------------------------------------");
k++;
}
fclose(destinos);
do
{
puts("\n* ingrese codigo de destino");
scanf("%d",&c);
if(c < 1 || c > 5)
puts("\tel codigo de destino tiene que estar en el rango 1-5");
}
while(c < 1 || c > 5);
}
return(c);
}

esto es lo que contiene el fichero original

Citar
1
Europa, Africa, Oceania
3   2000
7   2000
8   3000
2
Mexico, Estados Unidos, Canada, Belice, Costa Rica, El Salvador, Guatemala, Argentina, Brasil, Chile, Paraguay, Peru, Uruguay, Guyana, Suriname, Antigua, Barbuda, Bolivia, Cuba, Ecuador, Honduras, San Vicente y las Granadinas, Nicaragua
3   1000
7   2000
8   2500
3
Panama
3   500
7   700
8   1000
4
Colombia
3   300
7   500
8   700
5
Otras islas del caribe
3   500
7   700
8   1000

y esto es lo que muestra el programa

Citar

seleccione un codigo de destino de la lista
---------------------------------------------

Codigo 1
-------------------------------------------------
Europa, Africa, Oceania
Dias del viaje: 3       cantidad de divisas: 2000
Dias del viaje: 7       cantidad de divisas: 2000
Dias del viaje: 8       cantidad de divisas: 3000
-------------------------------------------------

Codigo 2
-------------------------------------------------
Mexico, Estados Unidos, Canada, Belice, Costa Rica, El Salvador, Guatemala, Arge
ntina, Brasil, Chile, Paraguay, Peru, Uruguay, Guyana, Suriname, Antigua, Barbud
a, Bolivia, Cuba, Ecuador, Honduras, San Vicente y las Granadinas, Nicaragua
Dias del viaje: 3       cantidad de divisas: 1000
Dias del viaje: 7       cantidad de divisas: 2000
Dias del viaje: 3       cantidad de divisas: 2500
-------------------------------------------------

Codigo 3
-------------------------------------------------
Panama
Dias del viaje: 3       cantidad de divisas: 500
Dias del viaje: 7       cantidad de divisas: 700
Dias del viaje: 3       cantidad de divisas: 1000
-------------------------------------------------

Codigo 4
-------------------------------------------------
Colombia
Dias del viaje: 3       cantidad de divisas: 300
Dias del viaje: 7       cantidad de divisas: 500
Dias del viaje: 3       cantidad de divisas: 700
-------------------------------------------------

Codigo 5
-------------------------------------------------
Otras islas del caribe
Dias del viaje: 3       cantidad de divisas: 500
Dias del viaje: 7       cantidad de divisas: 700
Dias del viaje: 3       cantidad de divisas: 1000
-------------------------------------------------

* ingrese codigo de destino
1
1 seleccion
(aqui el programa deja de responder)
Process exited with return value 3221225477
Press any key to continue . . .


« Última modificación: 11 Mayo 2014, 16:52 pm por J.cE » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: AYUDA lectura de fiche en c
« Respuesta #1 en: 11 Mayo 2014, 18:14 pm »

El error que mencionas se debe a que el numero de elementos de los arrays están mal:
Código
  1. n_dias dia[2];
  2.  
  3. /* ... */
  4.  
  5. destinos destino[4];

Hay que cambiar esas dos lineas a:
Código
  1. n_dias dia[3];
  2.  
  3. /* ... */
  4.  
  5. destinos destino[5];

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
J.cE

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: AYUDA lectura de fiche en c
« Respuesta #2 en: 11 Mayo 2014, 18:41 pm »

mil gracias amigo por tu ayuda
de verdad era eso
pero ahora tengo una duda
porque tiene que ser en lugar de 2 - 3 si las repeticiones para el i son <3
y en lugar de 4 - 5 si las repeticiones para el k son <5 ?
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: AYUDA lectura de fiche en c
« Respuesta #3 en: 11 Mayo 2014, 19:59 pm »

Porque en C los indices validos van de 0 a N-1 con N igual al numero de elementos. Si tu declaras un array:
Código
  1. int a[10];
Este tiene 10 elementos y se accede a ellos con a[0], a[1], ... a[9].

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 12,711 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
[Ayuda]Lectura de Archivo txt
PHP
rolly21102 5 3,796 Último mensaje 17 Julio 2011, 01:00 am
por WHK
Ayuda Con Lectura Archivo en c++
Programación C/C++
ZedGe 2 2,540 Último mensaje 23 Diciembre 2011, 20:32 pm
por ZedGe
Ayuda con la lectura de un fichero
Programación C/C++
DarkSorcerer 3 2,221 Último mensaje 22 Noviembre 2013, 02:43 am
por Vaagish
Ayuda con nube de lectura
Software
Antea 2 1,350 Último mensaje 29 Marzo 2019, 09:34 am
por Antea
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines