Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: n-utz en 6 Abril 2017, 00:12 am



Título: Problemas con buffer, normal?
Publicado por: n-utz en 6 Abril 2017, 00:12 am
Buenas noches gente, miren estoy programando con el IDE Code:blocks en Ubuntu, y ultimamente me encontre con problemas no normales, donde supongo que el codigo esta bien e igual el programa se comporta extrañamente.

Generalmente se da cuando cargo un string y luego quiero imprimirlo, no lo imprime, o imprime uno solo y no los otros tres. Realice un codigo simple para que vean de que se trata:

Código:
typedef struct {
    char detalle[300];
    char sentencia[20];
    }funciones;

int main()
{
    funciones f;
    FILE* fichero;
    fichero = fopen("stdio_h.txt", "w");
    printf("escribi\n");
    scanf("%[^\n]", &f.detalle);
    scanf("% [^\n]", &f.sentencia);
    fwrite(&f, sizeof(funciones), 1, fichero);
    fclose(fichero);

    system("clear");
    fichero = fopen("stdio_h.txt", "r");
    fread(&f, sizeof(funciones), 1, fichero);
    printf("%s", f.detalle);
    printf("%s", f.sentencia);
    fclose(fichero);
    return 0;
}

Por ejemplo este codigo solo imprime lo que guarde en f.detalle, y lo de f.sentencia no lo imprime y finaliza el programa en consola.

Yo supongo que es un problema con el buffer, pero al estar en Ubuntu no puedo hacer uso de fflush(stdin);

Puede que limpie el buffer manualmente con este codigo:

Código:
void limpiar_buffer(){

    int c;
    do {
        c = getchar;
        }while (c != '\n' && c != EOF);

    return;}*/

/*void cargar_funcion();
char selec_libreria();
void ver_funciones();

Pero igual el programa falla, es mas parece que nunca sale de esa funcion/bucle, aunque el codigo lo saque de google.

Espero que puedan ayudarme, ya que necesito hacer un programa en C con archivos y demas.

Tambien acepto sugerencias de otros IDES.


Título: Re: Problemas con buffer, normal?
Publicado por: MAFUS en 6 Abril 2017, 18:39 pm
A parte de un error en los scanf (para capturar cadenas no hay que usar el operador &) vacía el buffer con la sentencia
Código
  1. while(getchar()!='\n');
  2.  


Título: Re: Problemas con buffer, normal?
Publicado por: n-utz en 7 Abril 2017, 00:21 am
Corregi esos errores, e igual me sigue imprimiendo la primer cadena sola, te comento como quedo el codigo:

Código:
void limpiar_buffer(){
    while(getchar()!='\n');

    return;}

/*void cargar_funcion();
char selec_libreria();
void ver_funciones();*/

int main()
{
    funciones f;
    FILE* fichero;
    fichero = fopen("stdio_h.txt", "w");
    printf("escribi\n");
    scanf("%[^\n]", f.detalle);
    limpiar_buffer();
    scanf("% [^\n]", f.sentencia);
    fwrite(&f, sizeof(funciones), 1, fichero);
    fclose(fichero);

    system("clear");
    fichero = fopen("stdio_h.txt", "r");
    fread(&f, sizeof(funciones), 1, fichero);
    printf("%s", f.detalle);
    limpiar_buffer();
    printf("%s", f.sentencia);
    fclose(fichero);
    //printf("\n %s", &fun.sentencia);
    return 0;
}


Título: Re: Problemas con buffer, normal?
Publicado por: MAFUS en 9 Abril 2017, 02:32 am
El segundo limpiar_buffer() sobra. No hay necesidad de limpiarlo allí.
De todas formas lo he probado y funciona. Muestra el contenido de las dos cadenas pero lo hace en la misma línea porqué no has usado un salto de linea cuando termina de escribir la primera.


Título: Re: Problemas con buffer, normal?
Publicado por: n-utz en 9 Abril 2017, 22:32 pm
Simplemente era para probar, y no puedo hacer que funcione en mi IDE, imprime solo la primer cadena...

Alguien sabe de que se puede tratar??