Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: marcos0204 en 26 Marzo 2020, 15:49 pm



Título: error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Publicado por: marcos0204 en 26 Marzo 2020, 15:49 pm
#include <stdio.h>
#include <ctype.h>
int main(int argc, char **argv)
{
char c;
c = fgetc(stdin);
while(c != EOF){
if(isalnum(c))
printf("%c", c);
else
c = fgetc(stdin);
}
return 1;
}


Título: Re: error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Publicado por: fary en 26 Marzo 2020, 16:10 pm
Sin ser ningún lince...

Lees de un archivo sin previa apertura del mismo. Además donde esta la función isalnum?


Título: Re: error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Publicado por: ThunderCls en 26 Marzo 2020, 19:16 pm
Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.    char c;
  7.    c = fgetc(stdin);
  8.    while(c != EOF){
  9.        if(isalnum(c))
  10.            printf("%c", c);
  11.        else
  12.            c = fgetc(stdin);
  13.    }
  14.  
  15.    return 1;
  16. }

1- Utiliza etiquetas de codigo cuando publiques codigo en el foro
2- Te recomendaria que aprendas a depurar tus programas

Tu Problema:
Necesitas eliminar el "else" de tu condicional.
La linea: c = fgetc(stdin); necesita ejecutarse siempre, de lo contrario tu codigo lee un caracter y en caso de ser alfanumerico se ejecuta el printf pero nunca el fgetc, por lo que el puntero del stream no se incrementa, en la proxima iteracion se vuelve a leer exactamente el mismo caracter anterior y asi infinitamente sin llegar nunca al EOF


Título: Re: error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Publicado por: K-YreX en 26 Marzo 2020, 20:45 pm
Sin ser ningún lince...

Lees de un archivo sin previa apertura del mismo. Además donde esta la función isalnum?
El "archivo" del que lee es stdin, es decir, la entrada estándar (teclado) y la función isalnum() está en la librería <ctype.h>
Sin ser un lince tampoco... :rolleyes: :rolleyes:

El problema como ya dijo @ThunderCls es que sobra el else de ese condicional para que siempre se pueda ingresar un nuevo carácter al finalizar cada vuelta.


Título: Re: error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Publicado por: fary en 27 Marzo 2020, 22:44 pm
El "archivo" del que lee es stdin, es decir, la entrada estándar (teclado) y la función isalnum() está en la librería <ctype.h>
Sin ser un lince tampoco... :rolleyes: :rolleyes:

El problema como ya dijo @ThunderCls es que sobra el else de ese condicional para que siempre se pueda ingresar un nuevo carácter al finalizar cada vuelta.

 :-[ :-[ :-[ :-[

Pues sí, metí bién la pata sí.

saludos de casi lince.  :laugh: :xD