martes, 12 de julio de 2011

#5 ANSI C

#include "entrada.h"
#include "bool.h"
char pide_opcion(char* permitidos) {
  char actual;
  bool listo = FALSE;
  while (TRUE) {
    if (!listo) {
      actual = tolower(getchar());
      if (strchr(permitidos, actual) != NULL) {
 listo = TRUE;
      }
    } else {
      if (getchar() == '\n') {
 if (listo) {
   break;
 }
      }
    }
  }
  return actual;
}

int pide_numero(int minimo, int maximo) {
if(Maximo> pide_numero) {
  int numero = SIN_DEFINIR;
  char* entrada = NULL;
  char actual;
  int pos;
  double temp;
 
  entrada =
    (char*)malloc(sizeof(char)*
    LARGO_MAXIMO + 1);
  if (entrada == NULL) {
    return SIN_DEFINIR;
  }
  do {
    printf("Dame un valor entre %d y %d: ",
    minimo, maximo);
    // insistir
    pos = 0;
    do {
      actual = getchar();
      if (pos < LARGO_MAXIMO) {
 if (isdigit(actual)) {
   entrada[pos++] = actual;
 }
      }
    } while (actual != '\n');
    entrada[pos] = '\0';
    temp = atof(entrada);
    if (temp > INT_MAX - 1) {
      continue;
    }
    numero = atoi(entrada);
  } while (numero < minimo || numero > maximo);
  printf("Gracias.\n");
  free(entrada);
  return numero;
}
void pide_cadena(char* entrada) {
  char actual;
  int pos;
  bool ignorar_resto;
 
  do {
    ignorar_resto = FALSE;
    // printf("Dame una palabra: ");
    // insistir
    pos = 0;
    actual = getchar();
    if (!isalpha(actual)) {
      ignorar_resto = TRUE;
    } else {
      entrada[pos++] = toupper(actual);
      //printf("Iniciando con %c.\n", actual);
    }
    do {
      actual = getchar();
      if (pos < LARGO_MAXIMO) {
 if (!ignorar_resto &&
     isalnum(actual)) {
   entrada[pos++] = toupper(actual);
   //printf("Aceptamos %c.\n", actual);
 } else {
   if (actual == '\n') {
     //printf("Procesando.\n");
     break;
   }
   ignorar_resto = TRUE;
   //printf("Rechazamos %c.\n", actual);
 }
      }
    } while (TRUE);
    if (ignorar_resto) {
      pos = 0;
    }
  } while (pos == 0);
  entrada[pos] = '\0';
  printf("Gracias: <%s>\n", entrada);
  return;
}

1 comentario:

  1. Esto no tiene nada que ver ni con pilas ni con colas. Es pura toma de entrada. Además, hace falta usar un ambiente de acomodo de código. Si quieres puntos, sube algo relacionado con la tarea a más tardar el jueves y te lo tomo como puntos extra. Esta entrada no vale nada.

    ResponderEliminar