elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tengo un programa que no funciona como quiero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tengo un programa que no funciona como quiero  (Leído 2,110 veces)
Itsrecordbaby

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Tengo un programa que no funciona como quiero
« en: 1 Febrero 2023, 01:28 am »

Tengo que hacer un programa que identifique se una frase es palindroma (que se lee igual de izquierda a derecha que de derecha a izquierda) la parte de verificar si es palindromo funciona pero me pidieron que le agregue un menu, lo intente y no me deja ingresar la frase y se manda de nuevo a al menu. ayuda pliss:


Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. void comprobarPalindromo() {
  6.  char pal[40], pal2[40];
  7.  int n, i, j, flag = 1;
  8.  printf("Por favor, introduce una palabra o frase para verificar si es palindroma: \n");
  9.  fgets(pal, 40, stdin);
  10.  n = strlen(pal);
  11.  j = 0;
  12.  for (i = 0; i < n; i++) {
  13.    if (isalnum(pal[i])) {
  14.      pal2[j++] = tolower(pal[i]);
  15.    }
  16.  }
  17.  pal2[j] = '\0';
  18.  for (i = 0; i < j / 2; i++) {
  19.    if (pal2[i] != pal2[j - i - 1]) {
  20.      flag = 0;
  21.      break;
  22.    }
  23.  }
  24.  if (flag) {
  25.    printf("Felicidades, escribiste un palindromo :)\n");
  26.  } else {
  27.    printf("No escribiste un palindromo :(\n");
  28.  }
  29. }
  30.  
  31. int main() {
  32.  int opcion;
  33.  do {
  34.    printf("\nMenu del proyecto palindromo\n");
  35.    printf("1. Integrantes\n");
  36.    printf("2. Comprobar si es o no palindromo\n");
  37.    printf("3. Salir\n");
  38.    printf("Seleccione una opcion: ");
  39.    scanf("%d", &opcion);
  40.    switch (opcion) {
  41.      case 1:
  42.        printf("Mauricio Mora,Andres Calle\n");
  43.        break;
  44.      case 2:
  45.        printf("Comprobar si es o no palindromo\n");
  46.        comprobarPalindromo();
  47.        break;
  48.      case 3:
  49.        printf("Saliendo...\n");
  50.        break;
  51.      default:
  52.        printf("Opcion Invalida\n");
  53.        break;
  54.    }
  55.  } while (opcion != 3);
  56.  return 0;
  57. }


« Última modificación: 1 Febrero 2023, 07:50 am por fary » En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Tengo un programa que no funciona como quiero
« Respuesta #1 en: 1 Febrero 2023, 08:31 am »

Cuando lees con scanf se deja el enter en el buffer de entrada y cuando llamas a fgets lo recoge del buffer, por eso nunca llegas a leer la cadena.

Limpia el buffer de entrada con fflush. Tu código funcional:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. void comprobarPalindromo() {
  6.  char pal[40], pal2[40];
  7.  int n, i, j, flag = 1;
  8.  
  9.  printf("Por favor, introduce una palabra o frase para verificar si es palindroma: \n");
  10.  fgets(pal, 40, stdin);
  11.  
  12.  n = strlen(pal);
  13.  j = 0;
  14.  for (i = 0; i < n; i++) {
  15.    if (isalnum(pal[i])) {
  16.      pal2[j++] = tolower(pal[i]);
  17.    }
  18.  }
  19.  pal2[j] = '\0';
  20.  for (i = 0; i < j / 2; i++) {
  21.    if (pal2[i] != pal2[j - i - 1]) {
  22.      flag = 0;
  23.      break;
  24.    }
  25.  }
  26.  if (flag) {
  27.    printf("Felicidades, escribiste un palindromo :)\n");
  28.  } else {
  29.    printf("No escribiste un palindromo :(\n");
  30.  }
  31. }
  32.  
  33. int main() {
  34.  int opcion;
  35.  do {
  36.    printf("\nMenu del proyecto palindromo\n");
  37.    printf("1. Integrantes\n");
  38.    printf("2. Comprobar si es o no palindromo\n");
  39.    printf("3. Salir\n");
  40.    printf("Seleccione una opcion: ");
  41.    scanf("%d", &opcion);
  42.  
  43.    fflush(stdin);  //<---------AQUI LIMPIAS EL BUFFER STDIN.
  44.  
  45.    switch (opcion) {
  46.      case 1:
  47.        printf("Mauricio Mora,Andres Calle\n");
  48.        break;
  49.      case 2:
  50.        printf("Comprobar si es o no palindromo\n");
  51.        comprobarPalindromo();
  52.        break;
  53.      case 3:
  54.        printf("Saliendo...\n");
  55.        break;
  56.      default:
  57.        printf("Opcion Invalida\n");
  58.        break;
  59.    }
  60.  } while (opcion != 3);
  61.  return 0;
  62. }


En línea

Un byte a la izquierda.
RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Tengo un programa que no funciona como quiero
« Respuesta #2 en: 1 Febrero 2023, 16:55 pm »

Es cierto que el problema se resuelve limpiando el buffer, pero fflush(stdin) no es lo correcto. Esta función sólo sirve para buffers de salida, no de entrada, como stdin. Usarlo con stdin funciona de casualidad en Windows, siempre que uses MinGW. Si usas, por ejemplo, alguna versión reciente de Visual C++, no funciona, y tampoco sirve en Linux, independientemente del compilador. Como se trata de un ejercicio simple y no estás validando entrada ni verificando errores, puedes limpiar el buffer con esta línea después del scanf:

Código
  1. while (getchar() != '\n');
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines