Foro de elhacker.net

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
Código:
[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
Código:
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
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

Código:
std::cin >> letra;


Título: Re: Ayuda programa con ficheros
Publicado por: 0xDani en 20 Septiembre 2012, 17:30 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
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

Código:
std::cin >> letra; 

lo he probado y va bien

el codigo sera el siguiente

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iostream>
  4.  
  5.  
  6. int main()
  7. {
  8.    FILE *fichero;
  9.    char nombre_fichero[256];
  10.    char caracter;
  11.    char letra;
  12. char *let1;
  13.    printf ("\nescriba el nombre de un fichero para visualizar:");
  14.    gets (nombre_fichero);
  15.    fichero = fopen (nombre_fichero, "r+");
  16.  
  17.    if (fichero == NULL)
  18.    {
  19.        printf("no se ha encontrado el fichero");
  20.    }
  21.    else
  22.    {
  23.      caracter = fgetc (fichero);
  24.      while (feof (fichero) ==0)
  25.      {
  26.          printf ("%c", caracter);
  27.          caracter = fgetc (fichero);
  28.      }
  29.      fclose (fichero);
  30.    }
  31.  
  32.    printf ("\nQuiere visualizar otro fichero (S/N)");
  33. std::cin >> letra;
  34.  
  35.    if ((letra == 's') || (letra == 'S'))
  36.    {
  37.        main();
  38.    }
  39.    else
  40.    {
  41.       fflush (stdin);
  42.       printf ("\n\nPulse intro para finalizar...");
  43.       getchar();
  44.       return 0;
  45.    }
  46. }


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
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
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;
Código:

#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
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
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:
Código
  1. char letra[1];
  2.  
  3. /* ... */
  4.  
  5. gets (letra);
  6.  
  7. /* ... */
  8.  
  9. 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í:
Código
  1. char letra[2];
  2.  
  3. /* ... */
  4.  
  5. gets (letra);
  6.  
  7. /* ... */
  8.  
  9. 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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    FILE *fichero;
  7.    char nombre_fichero[256];
  8.    char caracter;
  9.    char letra;
  10.  
  11.    printf ("\nescriba el nombre de un fichero para visualizar:");
  12.    gets (nombre_fichero);
  13.    fichero = fopen (nombre_fichero, "r+");
  14.  
  15.    if (fichero == NULL)
  16.    {
  17.        printf("no se ha encontrado el fichero");
  18.    }
  19.    else
  20.    {
  21.      caracter = fgetc (fichero);
  22.      while (feof (fichero) ==0)
  23.      {
  24.          printf ("%c", caracter);
  25.          caracter = fgetc (fichero);
  26.      }
  27.      fclose (fichero);
  28.    }
  29.  
  30.    printf ("\nQuiere visualizar otro fichero (S/N)");
  31.    letra=getchar();
  32.    getchar();//Para que no se acumule en el buffer el intro pulsado
  33.  
  34.    if ((letra == 's') || (letra == 'S'))
  35.    {
  36.        main();
  37.    }
  38.    else
  39.    {
  40.       fflush (stdin);
  41.       printf ("\n\nPulse intro para finalizar...");
  42.       getchar();
  43.       return 0;
  44.    }
  45. }
  46.