|
| Autor |
Mensaje |
Karla_vs
Registrado: 27 Feb 2010 Mensajes: 4
|
Publicado: Sab 27 Feb, 2010 19:06 pm
Título del mensaje: Problema con Ficheros en C |
|
|
Hola a todos!, bueno estoy haciendo un programita de ficheros y ya casi lo estoy terminando, pero estoy trabada en una parte, concretamente en una parte donde tengo que modificar un fichero.
Mi idea fue guardar lo que quiero escribir en un archivo auxiliar y despues pasarlo todo al archivo original, preguntando siempre si quieres guardar los cambios o no. Aqui les dejo el codigo que tengo hecho:
| Código: |
fichero=fopen("/home/karla/Escritorio/Nuevo.txt","r+");
if (fichero==NULL)
{
printf("\nNo se puede abrir el fichero (puede ser que no se haya creado anteriomente)\n");
exit(1);
}
else
{
aux=fopen("/home/karla/Escritorio/aux.txt","w");
printf("\nEscribe el texto que quieras!\n");
scanf(" %[^\n] ", escribir);
fputs(escribir, aux);
fwrite( &escribir, sizeof(escribir), 1, aux );
printf("\n¿Deseas guardar los cambios en el fichero? (s/n): ");
scanf(" %c ",&sn);
printf("\n%c",sn);
if(sn=='s')
{
int letra=fgetc(aux);
while(letra!=EOF)
{
fputc(letra,fichero);
printf("%c",letra);
letra=fgetc(aux);
}
}
fclose(aux);
fclose(fichero);
}
|
El archivo auxiliar me lo guarda perfectamente con lo que yo le escribo, pero el archivo original (Nuevo.txt) no me guarda nada, me lo deja en blanco.
Ademas tambien creo que tengo un problema con los scanf muy raro. Miren, cuando me pregunta "Escribe el texto que quieras" yo le pongo el texto, le doy al enter y el cursor pasa a la linea de abajo y se queda esperando, tengo que pulsar otra letra o cualquier caracter y darle otra vez al enter para que el programa continue.
Pero ese caracter que yo puse por ultimo lo guarda en la variable "sn" y aunque yo ponga cualquier cosa despues de que me pregunte "¿Deseas guardar los cambios en el fichero?" la variable "sn" se queda con el caracter que yo le puse anteriormente.
No se si me explique bien porque es un rollo jaja
Bueno si alguien me puede ayudar le estaria agradecidisima ya que llevo ya un tiempo con esto.
Muchas gracias por todo!!! |
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 890 Ubicación: y*width+x
|
Publicado: Dom 28 Feb, 2010 19:16 pm
Título del mensaje: Re: Problema con Ficheros en C |
|
|
Bien, vayamos por partes.
| Código: | | aux=fopen("/home/karla/Escritorio/aux.txt","w"); |
El nombre del fichero, debería tener más de tres carateres. Yo te recomiendo que siempre tuviera una longitud de 8 caracteres, que no incluya espacios ni caracteres especiales. Por ejemplo aux00000.txt. De momento estás abriendo un fichero para su escritura.
| Código: | | scanf(" %[^\n] ", escribir); |
Para tomar nombres no estaría mal, pero en su lugar mejor usa
| Código: | | fgets (escribir,255,stdin); |
Esto pasa el buffer de entrada del teclado a la variable escribir, limitando el tamaño a lo que quieras, en este caso lo puse a 255.
| Código: | fputs(escribir, aux);
fwrite( &escribir, sizeof(escribir), 1, aux ); |
Con fputs no deberías tener problema, pero ese fwrite está volviendo hacer lo que hicistes con el fputs, pero luego si pretendes tomar la longitud de la cadena, te equivocas usando el sizeof, que se usa para los tipos de datos, y en su lugar para tomar el tamaño de la cadena, tienes que usar strlen(escribir). Pero ya te digo, estás escribiendo doblemente el dato.
Luego para poder leer de nuevo aux, tendrías que cerrar el fichero, y volverlo abrir pero esta vez con el atributo de lectura, "r". Acuérdate de cerrarlo antes de abrirlo nuevamente.
| Código: | | printf("\n%c",sn); |
Sobra esta línea... un debug manual?
| Código: | | letra=fgetc(aux); |
Usa un casting. (int) o simplemente declara letra como un char.
No es lo mismo CORRECTO que | Código: | | scanf(" %c ",&sn); | INCORRECTO. |
http://www.youtube.com/watch?v=DzLKIW86hmM
|
|
| Volver arriba |
|
|
Karla_vs
Registrado: 27 Feb 2010 Mensajes: 4
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 890 Ubicación: y*width+x
|
Publicado: Lun 01 Mar, 2010 12:27 pm
Título del mensaje: Re: Problema con Ficheros en C |
|
|
prueba ponerlo así, usando fflush(stdin):
| Código: | ...
...
aux=fopen("aux00000.txt","w");
printf("\nEscribe el texto que quieras!\n");
fflush(stdin); fflush(stdin);
if (aux!=NULL) {
fgets (escribir,255,stdin);
fputs(escribir, aux);
fclose(aux);
}
fflush(stdin); fflush(stdin);
... |
A mi por lo menos, se me ejecuta bien sin los fflush()... pero prueba y me cuentas... |
http://www.youtube.com/watch?v=DzLKIW86hmM
|
|
| Volver arriba |
|
|
Karla_vs
Registrado: 27 Feb 2010 Mensajes: 4
|
Publicado: Lun 01 Mar, 2010 14:38 pm
Título del mensaje: Re: Problema con Ficheros en C |
|
|
Sigue igual, yo lo tengo asi:
| Código: |
aux=fopen("/home/karla/Escritorio/auxiliar.txt","w");
printf("\nEscribe el texto que quieras!\n");
fflush(stdin); fflush(stdin);
if(aux!=NULL)
{
fgets (escribir,80,stdin);
fputs(escribir, aux);
fclose(aux);
}
fflush(stdin); fflush(stdin);
printf("\n¿Deseas guardar los cambios en el fichero? (s/n): ");
scanf(" %c ",&sn);
|
Cuando compilo, despues de decirme "Escribe el texto que quieras!" salta directamente a "¿Deseas guardar los cambios en el fichero?"
Probé a ponerle un printf despues del "fclose(aux);" para ver si entra en el if y entra perfectamente.
Escribir lo tengo declarado como char[80]. Bueno seguire investigando.
Por cierto hice este pequeño programita con fgets y funciona perfectamente, algo es algo!! jaja
| Código: |
#include <stdio.h>
int main()
{
char cad[80];
printf("\nIntroduce un texto:\n");
fgets(cad,80,stdin);
printf("\nEste es el texto:\n%s",cad);
return 0;
}
|
Muchas gracias por todo WhiteSkull!!  |
|
|
|
| Volver arriba |
|
|
Karla_vs
Registrado: 27 Feb 2010 Mensajes: 4
|
Publicado: Mar 23 Mar, 2010 00:47 am
Título del mensaje: Re: Problema con Ficheros en C |
|
|
| Karla_vs escribió: | Sigue igual, yo lo tengo asi:
| Código: |
aux=fopen("/home/karla/Escritorio/auxiliar.txt","w");
printf("\nEscribe el texto que quieras!\n");
fflush(stdin); fflush(stdin);
if(aux!=NULL)
{
fgets (escribir,80,stdin);
fputs(escribir, aux);
fclose(aux);
}
fflush(stdin); fflush(stdin);
printf("\n¿Deseas guardar los cambios en el fichero? (s/n): ");
scanf(" %c ",&sn);
|
Cuando compilo, despues de decirme "Escribe el texto que quieras!" salta directamente a "¿Deseas guardar los cambios en el fichero?"
Probé a ponerle un printf despues del "fclose(aux);" para ver si entra en el if y entra perfectamente.
Escribir lo tengo declarado como char[80]. Bueno seguire investigando.
Por cierto hice este pequeño programita con fgets y funciona perfectamente, algo es algo!! jaja
| Código: |
#include <stdio.h>
int main()
{
char cad[80];
printf("\nIntroduce un texto:\n");
fgets(cad,80,stdin);
printf("\nEste es el texto:\n%s",cad);
return 0;
}
|
Muchas gracias por todo WhiteSkull!!  |
Bueno rescato este post porque no he dado con la solucion aun, a ver si alguien me podria ayudar. Sigo con el mismo problema, con el codigo del mensaje anterior, osea este:
| Código: |
aux=fopen("/home/karla/Escritorio/auxiliar.txt","w");
printf("\nEscribe el texto que quieras!\n");
fflush(stdin); fflush(stdin);
if(aux!=NULL)
{
fgets (escribir,80,stdin);
fputs(escribir, aux);
fclose(aux);
}
fflush(stdin); fflush(stdin);
printf("\n¿Deseas guardar los cambios en el fichero? (s/n): ");
scanf(" %c ",&sn);
|
Despues de imprimirme por pantalla "Escribe lo que quieras" salta directamente a "¿Deseas guardar los cambios en el fichero?"
Muchas gracias!! |
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 890 Ubicación: y*width+x
|
|
| Volver arriba |
|
|
centinela-100 Usuario Iniciado
Registrado: 02 Abr 2010 Mensajes: 11
|
Publicado: Jue 08 Abr, 2010 18:20 pm
Título del mensaje: Re: Problema con Ficheros en C |
|
|
Hola, yo hice lo siguiente bajo WinXp, seguramente funciona en Linux tambien con algunos pequeños cambios, Saludos.
| Código: | #include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <conio.h> /* No Ansi C */
/* la función main comienza la ejecución del programa */
int main( void )
{
FILE *pfFichero, *pfAux;
char c;
int respuesta;
pfFichero = fopen( "C:\\Documents and settings\\Eduardo\\Escritorio\\Nuevo.txt", "r+" );
if ( pfFichero == NULL )
printf( "\nNo se puede abrir el fichero (puede ser que no se haya creado anteriomente)\n" );
else {
pfAux = fopen( "C:\\Documents and settings\\Eduardo\\Escritorio\\Auxiliar.txt", "w" );
if ( pfAux == NULL )
printf( "\nNo se puede abrir el archivo auxiliar\n" );
else {
system( "cls" );
printf( "Escribe el texto que quieras, EOF para finalizar:\n\n" );
while ( (c = (char)getchar() ) != EOF ) fputc( c, pfAux );
fclose( pfAux );
printf( "\n\n\n\t\tDeseas guardar los cambios en el fichero? (S/N): " );
while ( respuesta = (char)toupper( getch() ), !strchr( "SN", respuesta ) );
printf( "%c\n", respuesta );
if ( respuesta == 'S' ) {
pfAux = fopen( "C:\\Documents and settings\\Eduardo\\Escritorio\\Auxiliar.txt", "r" );
if ( pfAux == NULL )
printf( "No se puede abrir el archivo Auxliar" );
else {
/* copiar el archivo apuntado por pfAux en pfFichero */
while ( !feof( pfAux ) ) {
c = (char)getc( pfAux );
if ( !feof( pfAux ) ) putc( c, pfFichero );
}
}
printf( "\n\nFICHERO MODIFICADO\n" );
}
fclose( pfAux );
fclose( pfFichero );
}
}
getch(); /* pausa */
return 0; /* indicar terminación exitosa */
} /* fin de main */
|
|
|
|
|
| Volver arriba |
|
|
centinela-100 Usuario Iniciado
Registrado: 02 Abr 2010 Mensajes: 11
|
Publicado: Jue 08 Abr, 2010 19:39 pm
Título del mensaje: Re: Problema con Ficheros en C |
|
|
Aquí lo tienes para Linux...
| Código: |
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
/* la función main comienza la ejecución del programa */
int main( void )
{
FILE *pfFichero, *pfAux;
char c;
int respuesta;
pfFichero = fopen( "/home/eduardo/Escritorio/Nuevo.txt", "r+" );
if ( pfFichero == NULL )
printf( "\nNo se puede abrir el fichero (puede ser que no se haya creado anteriomente)\n" );
else {
pfAux = fopen( "/home/eduardo/Escritorio/Auxiliar.txt", "w" );
if ( pfAux == NULL )
printf( "\nNo se puede abrir el archivo auxiliar\n" );
else {
system( "clear" );
printf( "Escribe el texto que quieras, EOF para finalizar:\n\n" );
while ( (c = (char)getchar() ) != EOF ) fputc( c, pfAux );
fclose( pfAux );
printf( "\n\n\n\t\tDeseas guardar los cambios en el fichero? (S/N): " );
rewind( stdin ); /* reiniciar el indicador de posición */
respuesta = getchar();
if ( respuesta == 'S' || respuesta == 's' ) {
pfAux = fopen( "/home/eduardo/Escritorio/Auxiliar.txt", "r" );
if ( pfAux == NULL )
printf( "No se puede abrir el archivo Auxliar" );
else {
/* copiar el archivo apuntado por pfAux en pfFichero */
while ( !feof( pfAux ) ) {
c = (char)getc( pfAux );
if ( !feof( pfAux ) ) putc( c, pfFichero );
}
}
printf( "\n\nFICHERO MODIFICADO\n" );
}
fclose( pfAux );
fclose( pfFichero );
}
}
getchar(); /* pausa */
return 0; /* indicar terminación exitosa */
} /* fin de main */
|
|
|
|
|
| Volver arriba |
|
|