C/Visual C - Necesito ayuda

 
Vista:

Necesito ayuda

Publicado por eduardo (82 intervenciones) el 14/05/2009 20:44:59
Buenas tardes:
Tengo demasiada dificultad con las convesiones implícitas entre caracteres y enteros.
Por ejemplo mi programa llama a la función para que devuelva la letra correspondiente a la unidad y no se porque se detiene
la ejecución y me marca la linea:

disk = obtUnidad();

si desde main() se llama y se almacena en el mismo tipo que devuelve la función debería ir bien o es que el problema radica
dentro de la función.

Otra cosa que me marca error es en la linea:
int disponible[unidades]; (Constant expression required)

Esto último para probar el programa hice
int disponible[4];

Por favor si alguien pudiera hecharme una mano llevo demasiado tiempo en este programa y hasta hoy no logro terminarlo.

Gracias por alguna respuesta.
Estoy usando Borland C++ 5.02

Aqui el programa.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <dir.h> /* No Ansi C */
#include <dos.h> /* No Ansi C */
#include <conio.h> /* No Ansi C */

/* prototipo */
unsigned char obtUnidad( void );

/* la función main() comienza la ejecución del programa */
int main()
{
const int intNumBytes = sizeof( int ); /* detectar tamaño de enteros */

struct dfree p;

unsigned char disk;

float espacioLibre, espacioOcupado, espacioTotal;

char continuar;

clrscr();

/* si (int) es de 2 bytes */
if ( intNumBytes == 2 ) {
printf( " Este programa se ejecuta para enteros de 4 bytes " );
printf( " Pulse una tecla para continuar ..." );
getch();
}
else {
continuar = 'S';

/* ciclo de control */
while ( continuar != 'N' ) {
clrscr();
printf( " INFORMACION DE UNA UNIDAD ========================= " );

/* obtener la letra de la unidad y corresponderlo con el número (A = 1) */
disk = obtUnidad();

/* almacenar en la estructura p la información de la unidad */
getdfree( disk, &p );

/* si no se encuentra la unidad */
if ( p.df_sclus == -1 )
printf( " ERROR: Debe insertar un disco en la unidad ... ", 130 );
else {
printf( " UNIDAD %c -------- ", disk + 'A' - 1 );

/* informacion almacenada en la estructura */
printf( " Numero total de clusteres : %d ", p.df_total );
printf( " Clusters disponibles en la unidad: %d ", p.df_avail );
printf( " Numero de sectores por cluster : %d ", p.df_sclus );
printf( " Numero de bytes por sector : %d ", p.df_bsec );

/* calcular espacio total en Gbytes */
espacioTotal = ((float)p.df_total * p.df_sclus * p.df_bsec) / (1024.0 * 1024 * 1024);

/* calcular espacio libre en Gbytes */
espacioLibre = ((float)p.df_avail * p.df_sclus * p.df_bsec) / (1024.0 * 1024 * 1024);

/* calcular espacio ocupado en Gbytes */
espacioOcupado = espacioTotal - espacioLibre;

printf( " Espacio Libre : %6.2f Gb", espacioLibre );
if ( espacioLibre < 1 ) printf( " (%6.2f MB)", espacioLibre * 1024 );

printf( " espacio Ocupado: %6.2f Gb", espacioOcupado );
if ( espacioOcupado < 1 ) printf( " (%6.2f MB)", espacioOcupado * 1024 );

printf( " Espacio Total : %6.2f Gb", espacioTotal );
if ( espacioTotal < 1 ) printf( " (%6.2f MB)", espacioTotal * 1024 );
}

printf( " " );
printf( " Otra Unidad? S/N: " );
do {
continuar = (char)toupper( getch() );
} while ( !strchr("SN", continuar) );
}
}

return 0; /* indicar terminación exitosa */

} /* fin de main() */

/* IMPLEMENTACIÓN DE FUNCIONES */

/* devuelve la unidad seleccionada por el usuario */
unsigned char obtUnidad( void )
{
int unidadActual = getdisk(); /* obtener el número de la unidad actual (A = 0) */
int unidades = setdisk( unidadActual); /* obtener el número de unidades lógicas */

int disponible[unidades];

int unidad;

unsigned char c;

printf( " Se han detectado %d unidades l%cgicas en el sistema. ", unidades, 162 );

/* imprimir las letras de las unidades disponible */
printf( " Unidades disponibles: " );
for ( unidad = 0; unidad <= unidades; ++unidad ) {

/* establecer como unidad actual (la unidad debe contener un disco) */
setdisk( unidad );

/* ¿se ha logrado establecer como unidad actual? */
if ( unidad == getdisk() ) {
printf( " La Unidad %c: est%c disponible ", unidad + 'A', 160 );
disponible[unidad] = 1;
}
else
disponible[unidad] = 0;
}

setdisk( unidadActual );

printf( " Qu%c unidad desea analizar?: ", 130 );
while ( c = (char)toupper( getch() ), c < 'A' || c > ( unidades + 'A' ) || !disponible[(c - 'A')] );
putchar( c );
printf( " " );

return c;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder