C/Visual C - Problema con archivo en C

 
Vista:
sin imagen de perfil

Problema con archivo en C

Publicado por Bea (11 intervenciones) el 09/06/2016 03:03:58
Hola quisiera saber por que al ingresar por ejemplo dos cadena a un archivo txt, a la hora de mostrarlo muestra la ultima cadena dos veces.

por ejemplo ingreso cadena 1: hola, cadena 2: soy yo, y muestra
hola
soy yo
soy yo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
#include <stdlib.h>
 
void apertura ();
void ingresarcad (int n);
void mostrar ();
int main (int argc,char*argv[]){
 
	int n;
	FILE *f;
	do{
	printf ("Ingrese el numero de cadenas a ingresar:");
	scanf ("%i",&n);
	getchar();
    } while (n<0);
 
 
 
	apertura();
	ingresarcad(n);
	mostrar ();
 
	return 0;
}
 
void mostrar ()
{
 
	FILE *f;
    char aux[50];
	f=fopen("prob1.txt","r");
	if (f==NULL){
		printf ("No se pudo abrir el archivo.\n");
		exit(1);
	}
 
     while (!feof(f)){
     	fgets (aux,50,f);
     	printf ("%s",aux);
     	fflush(stdin);
	 }
 
    fclose (f);
}
 
 
void ingresarcad (int n)
{
	int i;
	char cad [n][50];
	FILE *f;
	f=fopen ("prob1.txt","w");
	if (f==NULL){
		printf ("EL archivo no se abrio\n");
		exit (1);
	}
	else {
		printf ("El archivo se abrio correctamente en modo escritura.\n");
		for (i=0;i<n;i++){
			printf ("Ingrese una cadena:");
			fgets (cad[i],50,stdin);
			fprintf (f,"%s",cad[i]);
		}
 
	}
 
	fclose (f);
}
 
 
void apertura ()
{
	FILE *f;
	f=fopen("prob1.txt","r");
	if (f==NULL){
		printf ("El archivo no se abrio.\n");
		exit (1);
	}
	else
	  printf ("El archivos se abrio correctamente en modo lectura.\n");
 
    fclose (f);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con archivo en C

Publicado por Capitan Kirk (97 intervenciones) el 09/06/2016 08:23:36
En el bucle de lectura, cuando lees la última cadena, aún no has leído la marca de fin de fichero. Por eso intenta una nueva lectura, en la que sí detecta el final del fichero. La variable aux, en la que estás guardando lo que lee del fichero, no cambia, por lo que conserva el valor anterior y por eso te la muestra dos veces. La solución es comprobar, tras cada lectura, si lo que has leído es el final del archivo:

1
2
3
4
5
6
7
8
9
while (!feof(f))
{
	fgets (aux,50,f);
	if (!feof(f))
	{
		printf ("%s",aux);
		fflush(stdin);
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con archivo en C

Publicado por Chema (234 intervenciones) el 09/06/2016 19:29:29
void ingresarcad (int n)

char cad [n][50]; esto, es una una tontería muy vista y repetida

char cad [?¿?¿?¿][50]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con archivo en C

Publicado por Bea (11 intervenciones) el 10/06/2016 18:20:40
Bien, si sabes tanto me podrias haber ayudado con el problema y no enfocarte en una "tonteria". Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con archivo en C

Publicado por Bea (11 intervenciones) el 10/06/2016 18:18:40
Muchisimas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con archivo en C

Publicado por Chema (234 intervenciones) el 11/06/2016 01:18:22
Estimada Bea, en la tontería que señalo, está la solución y el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con archivo en C

Publicado por Bea (11 intervenciones) el 11/06/2016 18:43:00
En realidad no estaba ahi el problema, igual gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Problema con archivo en C

Publicado por xve (24 intervenciones) el 12/06/2016 10:10:46
Hola Bea, estaría bien que compartieras donde estaba el problema...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con archivo en C

Publicado por Bea (11 intervenciones) el 22/06/2016 03:11:44
El problema estaba en que antes de mostrar la cadena tenia que poner
1
if (!feof(f))
y luego mostrar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar