Ayuda programa con ficheros

Iniciado por ankora45, 20 Septiembre 2012, 16:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Stakewinner00

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

ankora45

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
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro

0xDani

#12
@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().
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

ankora45

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]
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro

Stakewinner00

#14
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++

rir3760

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|.

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

diegoCmC

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;
    }
}
a todas las que me abrieron su coraza traeles suerte
ya no creo en el amor pero querria volver a verte