[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Problema con Debian y la programación



Hola lista!!

Me sucede una cosa curiosa con un programa que he tenido que hacer para la universidad. El programa en cuestión está escrito en ANSI C y lo compilo con el gcc que viene con Debian. El problema que me surge es con las funciones de C fflush y fprintf, y es que la función fflush no funciona bien por alguna razón ya que no me limpia el buffer de stdin como debería.

La función es esta:

int leerCadena (Tbyte cadena[MAX_CADENA+1])
/*funcion que obtiene un array del teclado y cuenta su longitud*/
{
   int tam,longitud;
fprintf(stdout,"\nIntroduzca su frase: ");
   fgets(cadena, MAX_CADENA+1, stdin);
   fflush(stdin);
   tam = strlen(cadena);
   if(cadena[tam-1] == 10)
   {
       cadena[tam-1] = '\0';
       longitud = tam-1;
   }
   else
       longitud=tam;
   return longitud;
}


El caso es que la uso dentro de un bucle en otra función y cuando escribo con el teclado más caracteres de los que puede almacenar "cadena" pues en vez de eliminarlos con fflush es como si no lo hiciera por que a la siguiente pasada del bucle utiliza esos caracteres.

Además en esta otra función:

extern int procesarPDU (TBloqueDeDatos pdu)
{
   int resultado;
int nPDU;/*se usa para procesar el valor de los tres bits de numero de fragmento*/
   Tbyte bitFinal;/*se usa para procesar el bit de final de array*/
   Tbyte aImprimir[DATOS];/*se usa para procesar los datos de la PDU*/
nPDU = procesarnPDU(pdu.buffer[1]);
   bitFinal = procesarBitFinal(pdu.buffer[1]);
   procesarDatos(aImprimir, pdu.buffer);
fprintf(stdout,"\nBlq.%d Ver.%d %d bytes <%c>:", nPDU, version, pdu.longitud, bitFinal);
   fprintf(stdout,"              %s\n", aImprimir);
if (bitFinal == 'F')
       return 0;
   else
       return 1;
}

cuando imprime por pantalla la variable "aImprimir" me imprime más caracteres de los que dicha variable puede almacenar, por ejemplo teniendo en cuenta que la constante DATOS tiene valor 10; en aImprimir solo se almacenan 10 caracteres, pero en algunas ocasiones imprime más de diez.

Recurro a ustedes por que el mismo código compilado en los windows de mi facultad se ejecuta perfectamente y no hace cosas "raras". Imagino que debe de ser algún fallo que tiene mi compilador o mi Debian (que por cierto es Etch) en la manera de manejar stdin y stdout.

Les agradecería si pudieran orientarme sobre la razón de estas anomalías.

Un saludo.

Jonay.



Reply to: