Domingo 15 de Diciembre de 2024, 02:05
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas con Ficheros
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problemas con Ficheros (Leído 1064 veces)
Donky
Nuevo Miembro
Mensajes: 1
Problemas con Ficheros
«
en:
Lunes 15 de Junio de 2009, 12:05 »
0
Hola muy buenas a todos!
Estoy liado con un programa de manejo de archivos y me está dando errores en las dos funciones que tengo creadas para imprimir datos, por más vueltas que le doy no se qué es lo que me falla, espero que vosotros podáis ver el problema. Gracias de antemano.
Las funciones son imprimirCasados e imprimirMujeres
Os dejo el código.
Gracias de antemano!!
Código: C
/*En una ciudad española se ha grabado el fichero FCENSO.DAT con datos de sus vecinos cuyos registros están formados por los siguientes campos:
CS_COD CS_NOM CS_EDAD CS_HIJO CS_SEXO CS_ECIV
char[5] char[20] int int char char
siendo CS_HIJO el número de hijos, y los códigos vláidos para CS_SEXO V o H, y para CS_ECIV S, C y V.
Se desea:
- Imprimir el número de personas casadas y la media de hijos que tienen.
- Imprimir el nombre y la edad de las mujeres solteras con edades comprendidas entre dos valores introducidos por el teclado.
- Añadir registros al fichero.
- El fichero será de tipo texto.*/
#include <stdio.h>
#include <stdlib.h>
typedef
struct
_censo
{
char
cs_cod
[
5
]
;
char
cs_nom
[
20
]
;
int
cs_edad
;
int
cs_hijo
;
char
cs_sexo
;
char
cs_eciv
;
}
strCenso
;
void
_menu
(
)
;
void
agregarRegistro
(
char
*
fichero
)
;
void
imprimirCasados
(
)
;
void
imprimirMujeres
(
)
;
int
main
(
void
)
{
int
min
,
max
;
char
opcion
;
char
fichero
[
14
]
=
"fcenso.txt"
;
do
{
_menu
(
)
;
opcion
=
getch
(
)
;
switch
(
opcion
)
{
case
'1'
:
agregarRegistro
(
fichero
)
;
break
;
case
'2'
:
imprimirCasados
(
fichero
)
;
break
;
case
'3'
:
printf
(
"nEdad minima -> "
)
;
scanf
(
"%d"
,&
min
)
;
printf
(
"nEdad maxima -> "
)
;
scanf
(
"%d"
,&
max
)
;
imprimirMujeres
(
min
,
max
,
fichero
)
;
break
;
case
'4'
:
exit
;
break
;
}
}
while
(
opcion
!=
'4'
)
;
puts
(
"nnPrograma finalizadon"
)
;
return
0
;
}
void
_menu
(
)
{
printf
(
"Programa Censon"
)
;
printf
(
"1 - Añadir Registrosn"
)
;
printf
(
"2 - Mostrar Personas Casadasn"
)
;
printf
(
"3 - Imprimir Mujeresn"
)
;
printf
(
"4 - Salir"
)
;
printf
(
"Escoge una opcion"
)
;
fflush
(
stdout
)
;
}
void
agregarRegistro
(
char
*
fichero
)
{
FILE
*
pFichero
;
strCenso registro
;
if
(
pFichero
==
NULL
)
{
pFichero
=
fopen
(
fichero
,
"w"
)
;
printf
(
"nCodigo: "
)
;
scanf
(
"%s"
,
registro.
cs_cod
)
;
fflush
(
stdin
)
;
printf
(
"Nombre: "
)
;
gets
(
registro.
cs_nom
)
;
fflush
(
stdin
)
;
printf
(
"Edad: "
)
;
scanf
(
"%d"
,
&
registro.
cs_edad
)
;
fflush
(
stdin
)
;
printf
(
"Numero de Hijos: "
)
;
scanf
(
"%d"
,
&
registro.
cs_hijo
)
;
fflush
(
stdin
)
;
printf
(
"Sexo (v o h): "
)
;
scanf
(
"%c"
,
&
registro.
cs_sexo
)
;
fflush
(
stdin
)
;
printf
(
"Estado Civil (s, c o v): "
)
;
scanf
(
"%c"
,
&
registro.
cs_eciv
)
;
fflush
(
stdin
)
;
fprintf
(
pFichero
,
"%s %s %d %d %c %cn"
,
registro.
cs_cod
,
registro.
cs_nom
,
registro.
cs_edad
,
registro.
cs_hijo
,
registro.
cs_sexo
,
registro.
cs_eciv
)
;
fclose
(
pFichero
)
;
}
else
{
pFichero
=
fopen
(
fichero
,
"a"
)
;
printf
(
"nCodigo: "
)
;
scanf
(
"%s"
,
registro.
cs_cod
)
;
fflush
(
stdin
)
;
printf
(
"Nombre: "
)
;
gets
(
registro.
cs_nom
)
;
fflush
(
stdin
)
;
printf
(
"Edad: "
)
;
scanf
(
"%d"
,
&
registro.
cs_edad
)
;
fflush
(
stdin
)
;
printf
(
"Numero de Hijos: "
)
;
scanf
(
"%d"
,
&
registro.
cs_hijo
)
;
fflush
(
stdin
)
;
printf
(
"Sexo (v o h): "
)
;
scanf
(
"%c"
,
&
registro.
cs_sexo
)
;
fflush
(
stdin
)
;
printf
(
"Estado Civil (s, c o v): "
)
;
scanf
(
"%c"
,
&
registro.
cs_eciv
)
;
fflush
(
stdin
)
;
fprintf
(
pFichero
,
"%s %s %d %d %c %cn"
,
registro.
cs_cod
,
registro.
cs_nom
,
registro.
cs_edad
,
registro.
cs_hijo
,
registro.
cs_sexo
,
registro.
cs_eciv
)
;
fclose
(
pFichero
)
;
}
}
void
imprimirCasados
(
char
*
fichero
)
{
FILE
*
pfichero
;
int
casadas
=
0
;
float
hijos
=
0
;
strCenso registro
;
if
(
fopen
(
fichero
,
"r"
)
==
NULL
)
{
printf
(
"nERROR al abrir el archivo para lecturan"
)
;
exit
(
1
)
;
}
if
(
fgetc
(
pfichero
)
!=
EOF
)
//Por si está vacío
{
do
{
fscanf
(
pfichero
,
"%s %s %d %d %c %cn"
,
registro.
cs_cod
,
registro.
cs_nom
,
registro.
cs_edad
,
registro.
cs_hijo
,
registro.
cs_sexo
,
registro.
cs_eciv
)
;
if
(
registro.
cs_eciv
==
'c'
)
{
casadas
++;
hijos
+=
registro.
cs_hijo
;
}
}
while
(
fgetc
(
pfichero
)
!=
EOF
)
;
if
(
casadas
)
printf
(
"nEl numero de personas casadas es %d y su media de hijos %.2fn"
,
casadas
,
hijos
/
casadas
)
;
else
printf
(
"nNo hay personas casadas"
)
;
}
else
printf
(
"nEl fichero esta vacion"
)
;
fclose
(
pfichero
)
;
}
void
imprimirMujeres
(
int
min
,
int
max
,
char
*
fichero
)
{
FILE
*
pfichero
;
int
casadas
=
0
,
entra
=
0
;
float
hijos
=
0
;
strCenso registro
;
if
(
(
fopen
(
fichero
,
"r"
)
)
==
NULL
)
{
printf
(
"nERROR al abrir el archivo para lecturan"
)
;
exit
(
1
)
;
}
if
(
fgetc
(
pfichero
)
!=
EOF
)
//Por si está vacío
{
do
{
fscanf
(
pfichero
,
"%s %s %d %d %c %cn"
,
registro.
cs_cod
,
registro.
cs_nom
,
registro.
cs_edad
,
registro.
cs_hijo
,
registro.
cs_sexo
,
registro.
cs_eciv
)
;
if
(
registro.
cs_sexo
==
'h'
&&
registro.
cs_edad
>=
min
&&
registro.
cs_edad
<=
max
)
{
entra
=
1
;
printf
(
"nNombre %sEdad %d anios"
,
registro.
cs_nom
,
registro.
cs_edad
)
;
}
}
while
(
fgetc
(
pfichero
)
!=
EOF
)
;
if
(
!
entra
)
printf
(
"nNinguna mujer cumple con las condicionesn"
)
;
}
else
printf
(
"nEl fichero esta vacion"
)
;
fclose
(
pfichero
)
;
}
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Problemas con Ficheros
«
Respuesta #1 en:
Lunes 15 de Junio de 2009, 13:27 »
0
Cita de: "Donky"
me está dando errores en las dos funciones que tengo creadas para imprimir datos
Entonces supondré que los ficheros los escribes bien
Código: C
if
(
fgetc
(
pfichero
)
!=
EOF
)
Aquí estás leyendo efectivamente un carácter del fichero, no sólo comprobando el final de fichero. Usa la función
eof(FILE *)
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas con Ficheros