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;
}
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


0