error, bucle infinito, alguien que me ayude a evitar el bucle infinito

Iniciado por marcos0204, 26 Marzo 2020, 15:49 PM

0 Miembros y 2 Visitantes están viendo este tema.

marcos0204

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

fary

Sin ser ningún lince...

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

ThunderCls

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


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
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

K-YreX

Cita de: 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?
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.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

fary

Cita de: YreX-DwX en 26 Marzo 2020, 20:45 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
Un byte a la izquierda.