Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BJM en 11 Enero 2012, 21:11 pm



Título: PROBLEMA EN TRANSFERIR DATOS DE UN FICHERO A UN ARRAY EN C.
Publicado por: BJM en 11 Enero 2012, 21:11 pm
#include <stdio.h>
#include <iostream>
using namespace std;

char oracion[]="hola!";
char nuevo[100];
int i=0;
FILE *pt;

main(){
       
      pt=fopen("mio.txt","w+");/*creo el fichero*/
       fprintf(pt,"%s",oracion);
       fclose(pt);

       pt=fopen("mio.txt","r");/*transfiero los datos del array al fichero*/
       for(i=0;!feof(pt);i++){
       fscanf(pt,"%s",&nuevo);
       fclose(pt);
       }

       pt=fopen("mio.txt","r");/*transfiero datos del fichero a un nuevo array y aca esta el problema*/
      while(i!=feof(pt)){
       printf("/n cadena:%s",nuevo);
       i++;
       }
      fclose(pt);
      system("pause");
      }
       
nota:Soy nueva en el mundo de la programacion.


Título: Re: PROBLEMA EN TRANSFERIR DATOS DE UN FICHERO A UN ARRAY EN C.
Publicado por: do-while en 12 Enero 2012, 14:37 pm
ˇBuenas!

Tienes varios errores.

Código
  1. fscanf(pt,"%s",&nuevo);
  2.  

nuevo ya es un puntero al primer caracter de la cadena, entoncens estas pasando como parametro un puntero a un puntero. Te sobra el ampersand.

Código
  1. for(i=0;!feof(pt);i++)
  2. {
  3.       fscanf(pt,"%s",&nuevo[i]);
  4.       fclose(pt);
  5. }
  6.  

Aqui hay dos errores. Primero estas intentando leer una cadena en un char (nuevo(i) es un caracter) y, segundo, estas cerrando el fichero despues de cada lectura.

O bien lees una unica vez la cadena, o bien lees los distintos caracteres, utilizando para esto ultimo el especificador de formato %c.

Otro problema esta en la condicion del while.

Si miras el prototipo de la funcion feof:

http://www.cplusplus.com/reference/clibrary/cstdio/feof/

veras que devuelve cero si no se ha llegado al final, y distinto de cero si se ha alcanzado el final.

Código
  1. while(i!=feof(pt))
  2.  

Lo que tu estas haciendo es comparar i con el valor devuelto por feof, y como no sabemos que valor devolvera feof, puede que nunca sea igual al de i, y entraras en un bucle infinito.

Comprueba siempre si se ha alcanzado el final del fichero mirando si el valor devuelto por feof es distinto de cero.

ˇSaludos!

PD: Para cualquier duda sobre funciones consulta siempre en internet. Te recomiendo:

http://www.cplusplus.com

Y antes de empezar con ficheros estudia entradas y salidas por teclado y monitor. scanf y printf para empezar.