elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problemas con buffer, normal?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con buffer, normal?  (Leído 375 veces)
n-utz

Desconectado Desconectado

Mensajes: 137

Babylon es el vampiro!


Ver Perfil
Problemas con buffer, normal?
« en: 6 Abril 2017, 00:12 »

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.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 893



Ver Perfil
Re: Problemas con buffer, normal?
« Respuesta #1 en: 6 Abril 2017, 18:39 »

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.  


En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
n-utz

Desconectado Desconectado

Mensajes: 137

Babylon es el vampiro!


Ver Perfil
Re: Problemas con buffer, normal?
« Respuesta #2 en: 7 Abril 2017, 00:21 »

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;
}
En línea

MAFUS


Desconectado Desconectado

Mensajes: 893



Ver Perfil
Re: Problemas con buffer, normal?
« Respuesta #3 en: 9 Abril 2017, 02:32 »

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.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
n-utz

Desconectado Desconectado

Mensajes: 137

Babylon es el vampiro!


Ver Perfil
Re: Problemas con buffer, normal?
« Respuesta #4 en: 9 Abril 2017, 22:32 »

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??
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines