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:
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:
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.
A parte de un error en los scanf (para capturar cadenas no hay que usar el operador &) vacía el buffer con la sentencia
while(getchar()!='\n');
Corregi esos errores, e igual me sigue imprimiendo la primer cadena sola, te comento como quedo el codigo:
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;
}
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.
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??