Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ankora45 en 20 Septiembre 2012, 16:49 PM

Título: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 16:49 PM
Hola veran estaba haciendo un programa en c para poder leer ficheros segun su nombre y al compilar el pragrama me tira un error el compilador quein me auda  :P
[code]#include <stdio.h>
#include <stdlib.h>



int main()
{
    FILE *fichero;
    char nombre_fichero[256];
    char caracter;
    char letra;

    printf ("\nescriba el nombre de un fichero para visualizar:");
    gets (nombre_fichero);
    fichero = fopen (nombre_fichero, "r+");

    if (fichero == NULL)
    {
        printf("no se ha encontrado el fichero");
    }
    else
    {
      caracter = fgetc (fichero);
      while (feof (fichero) ==0)
      {
          printf ("%c", caracter);
          caracter = fgetc (fichero);
      }
      fclose (fichero);
    }

    printf ("\nQuiere visualizar otro fichero (S/N)");
    gets (letra);

    if ((letra == 's') || (letra == 'S'))
    {
        main()
    }
    else
    {
       fflush (stdin);
       printf ("\n\nPulse intro para finalizar...");
       getchar();
       return 0;
    }
}
[/code]
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 16:50 PM
sorry el primer code no va dentro del programa se me quedo ahi ;D
Título: Re: Ayuda programa con ficheros
Publicado por: 0xDani en 20 Septiembre 2012, 16:54 PM
Utiliza etiquetas GeShi y pon los errores que te de el compilador, asi sera mucho mas facil ver los fallos y solucionarlos.

Saludos.
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 17:14 PM
errores :

in function main
33 varning: passing argument 1 of 'gets' makes pointer from integer vithout a cast
356 note: expected 'char *' but argument is of tyoe 'char'
38 error: expected ';' before '}' token
Título: Re: Ayuda programa con ficheros
Publicado por: Stakewinner00 en 20 Septiembre 2012, 17:24 PM
Cita de: ankora45 en 20 Septiembre 2012, 17:14 PM
errores :

in function main
33 varning: passing argument 1 of 'gets' makes pointer from integer vithout a cast
356 note: expected 'char *' but argument is of tyoe 'char'
38 error: expected ';' before '}' token

para el error de la line 38 prueba en añadir ";" al final sin comillas. (ami me funciono)

y para el de la 33 estoy buscando si encuentro algo
EDITO:Para el 33 use una trampilla por que yo se c++ solo
bueno pues la trampa es la siguiente
1-le pones #include <iostream> y modificas el gets (letra);
por lo siguiente

std::cin >> letra;
Título: Re: Ayuda programa con ficheros
Publicado por: 0xDani en 20 Septiembre 2012, 17:30 PM
Cita de: Stakewinner00 en 20 Septiembre 2012, 17:24 PM
para el error de la line 38 prueba en añadir ";" al final sin comillas. (ami me funciono)

y para el de la 33 estoy buscando si encuentro algo

Para el de la 33 vease el prototipo de gets(). Espera un puntero a char, y el le pasa un char.

Saludos.
Título: Re: Ayuda programa con ficheros
Publicado por: Stakewinner00 en 20 Septiembre 2012, 17:31 PM
Cita de: 0xDani en 20 Septiembre 2012, 17:30 PM
Para el de la 33 vease el prototipo de gets(). Espera un puntero a char, y el le pasa un char.

Saludos.
yo lo k hice es incorporar el cin de c++ con el include #include <iostream> y modificar el gets por

std::cin >> letra;

lo he probado y va bien

el codigo sera el siguiente

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <iostream>


int main()
{
   FILE *fichero;
   char nombre_fichero[256];
   char caracter;
   char letra;
char *let1;
   printf ("\nescriba el nombre de un fichero para visualizar:");
   gets (nombre_fichero);
   fichero = fopen (nombre_fichero, "r+");

   if (fichero == NULL)
   {
       printf("no se ha encontrado el fichero");
   }
   else
   {
     caracter = fgetc (fichero);
     while (feof (fichero) ==0)
     {
         printf ("%c", caracter);
         caracter = fgetc (fichero);
     }
     fclose (fichero);
   }

   printf ("\nQuiere visualizar otro fichero (S/N)");
std::cin >> letra;

   if ((letra == 's') || (letra == 'S'))
   {
       main();
   }
   else
   {
      fflush (stdin);
      printf ("\n\nPulse intro para finalizar...");
      getchar();
      return 0;
   }
}



al ejecutarlo encontre un error que supongo que ya lo arreglaras tu mismo sino ya sabes aki te ayudamos
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 17:34 PM
no xD sigue sin arreglarse ahora pone
33 varin label 'std' defined but not used
Título: Re: Ayuda programa con ficheros
Publicado por: Stakewinner00 en 20 Septiembre 2012, 17:37 PM
Cita de: ankora45 en 20 Septiembre 2012, 17:34 PM
Gracias a los +1 ya lo arregle muchas gracias  :rolleyes:

de nada

normalmente no contesto a users que no tengna mas de 10 mensajes por que bastantes veces me encuentro gente que pide ayuda y ya no se le ve el pelo, como tienes la imagen de linux hice una excepción XD
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 17:37 PM
sorry no se arreglo fue un error mio xD sorry
Título: Re: Ayuda programa con ficheros
Publicado por: Stakewinner00 en 20 Septiembre 2012, 17:39 PM
Cita de: ankora45 en 20 Septiembre 2012, 17:37 PM
sorry no se arreglo fue un error mio xD sorry

como minimo compila no? por k a mi si, lo otro sino te sale te intentaremos ayudar
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 17:43 PM
no no me compila bien me da 2 errores y 2 advertencias:
3 error iostream: no such file or directory
33 error: expected expresion ':' token
33 varing: label 'std' defined but not used
12 varing: unused variable let1
Título: Re: Ayuda programa con ficheros
Publicado por: 0xDani en 20 Septiembre 2012, 17:43 PM
@ankora45, si lo compilas con un compilador de C dificilmente te va a dar por bueno el std::cin. Haz una prueba, declara letra como char letra[1].

EDITO: Para obtener un caracter, sin declararlo como array, esta getchar().
Título: Re: Ayuda programa con ficheros
Publicado por: ankora45 en 20 Septiembre 2012, 17:58 PM
Gracias ya solo me tira una advertenci pero el compilador la ignora se puede compilar y funciona correctamente gracias +1 a los dos posteo codigo arreglado;


#include <stdio.h>
#include <stdlib.h>



int main()
{
    FILE *fichero;
    char nombre_fichero[256];
    char caracter;
    char letra[1];

    printf ("\nescriba el nombre de un fichero para visualizar:");
    gets (nombre_fichero);
    fichero = fopen (nombre_fichero, "r+");

    if (fichero == NULL)
    {
        printf("no se ha encontrado el fichero");
    }
    else
    {
      caracter = fgetc (fichero);
      while (feof (fichero) ==0)
      {
          printf ("%c", caracter);
          caracter = fgetc (fichero);
      }
      fclose (fichero);
    }

    printf ("\nQuiere visualizar otro fichero (S/N)");
    gets (letra);

    if ((letra == 's') || (letra == 'S'))
    {
        main()

    }

    else
    {
       fflush (stdin);
       printf ("\n\nPulse intro para finalizar...");
       getchar();
       return 0;
    }
}
[code]
[/code]
Título: Re: Ayuda programa con ficheros
Publicado por: Stakewinner00 en 20 Septiembre 2012, 18:09 PM
pero cuando use tu programa hacia bucles raros

para compilar con mi metodo tienes que guardarlo como c++ y compilarlo con g++

lo que encuentro raro es k con c++ se peuda suar c y con c no se pueda usar c++
Título: Re: Ayuda programa con ficheros
Publicado por: rir3760 en 21 Septiembre 2012, 17:30 PM
Cita de: ankora45 en 20 Septiembre 2012, 17:58 PMya solo me tira una advertenci pero el compilador la ignora se puede compilar y funciona correctamente gracias +1 a los dos posteo codigo arreglado
Tu programa tiene varias deficiencias como el uso de "gets" y "fflush(stdin)", por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

El error principal continua, al llamar a la función "gets" utilizas:
char letra[1];

/* ... */

gets (letra);

/* ... */

if ((letra == 's') || (letra == 'S'))

Ello no es correcto por dos razones: solo se puede almacenar un carácter en el array "letra" (ahí el programa puede reventar) y cuando realizas la comparación no tratas con un carácter sino con una dirección de memoria (donde se almacena el array).

Para que funcione correctamente debería ser mas o menos así:
char letra[2];

/* ... */

gets (letra);

/* ... */

if ((letra[0] == 's') || (letra[0] == 'S'))

Pero debido al uso de "gets" sigue la posibilidad de que el programa reviente (mejor usar "fgets", ello se indica en el tema que mencione).

Un saludo
Título: Re: Ayuda programa con ficheros
Publicado por: diegoCmC en 22 Septiembre 2012, 14:42 PM
Aqui te pongo el codigo, y te pongo los errores.
despues del main() te faltaba un punto y coma
Intentas captar un caracter y usas gets() gets es solo para cadenas, para un solo caracter tienes que usar getchar()
Un salduo

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fichero;
    char nombre_fichero[256];
    char caracter;
    char letra;

    printf ("\nescriba el nombre de un fichero para visualizar:");
    gets (nombre_fichero);
    fichero = fopen (nombre_fichero, "r+");

    if (fichero == NULL)
    {
        printf("no se ha encontrado el fichero");
    }
    else
    {
      caracter = fgetc (fichero);
      while (feof (fichero) ==0)
      {
          printf ("%c", caracter);
          caracter = fgetc (fichero);
      }
      fclose (fichero);
    }

    printf ("\nQuiere visualizar otro fichero (S/N)");
    letra=getchar();
    getchar();//Para que no se acumule en el buffer el intro pulsado

    if ((letra == 's') || (letra == 'S'))
    {
        main();
    }
    else
    {
       fflush (stdin);
       printf ("\n\nPulse intro para finalizar...");
       getchar();
       return 0;
    }
}