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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C][?] No se ejecutan printf
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C][?] No se ejecutan printf  (Leído 3,121 veces)
JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
[C][?] No se ejecutan printf
« en: 23 Marzo 2016, 13:55 pm »

Tengo un problema la mar de raro. Pase lo que pase nunca imprime el texto "prueba", si meto un valor incorrecto si se ejecuta el
Código:
printf("El número %d%c no es válido\n",n,c)
El código es
Código:
int main() {
  int     n; //Número que añadiremos
  char    c; //Carácter de control
  bool    control = false; //Variable para el control de entrada

  do {
    printf("Introduce un número en base decimal: ");
    if(scanf("%d%c", &n, &c) != 2 || c != '\n') {
      printf("El número %d%c no es válido\n", n, c);
      clean_stdin();
      control = false;
    } else {
      printf("prueba");
      if(n >= 0) {
printf("El binario de %d es: ", n);
cambioBinario(n);
control = true;
      }
    }
  } while(control == false || n < 0);

  return 0;
}

Muchas gracias de antemano


En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: [C][?] No se ejecutan printf
« Respuesta #1 en: 23 Marzo 2016, 15:24 pm »

Fíjate en una cosa. ¿Qué tiene que pasar para que el if diga que es falsa la condición? O bien que no haya leido los datos suficientes, o bien que el carácter que haya leido sea igual a '\n'. Entonces, se tendrían que dejar de cumplir esas dos condiciones. Para que falle la primera, podríamos introducir un "hola\n" (evidentemente "hola\n" no es un número natural), pero al haber introducido un "hola\n" y haber fallado al traducirlo a número, ese "hola\n" se ha quedado guardado en un búfer esperando a que sea leido. Entonces, una vez fallada la lectura del número natural, se procede a leer el carácter. El primer carácter disponible es la 'h'. Entonces, después de la lectura el entero vale 0 y la variable de tipo carácter vale 'h'. Entonces, como ves, el carácter es distinto de '\n', y por tanto nunca esa condición se va a cumplir.


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [C][?] No se ejecutan printf
« Respuesta #2 en: 23 Marzo 2016, 18:04 pm »

A mi me funciona el código.

A decir verdad me he inventado código para las funciones que no muestras, a lo mejor el problema está allí.

¿Porqué no muestras el código entero, #includes incluidos?

Por cierto, para escribir mensajes de error o cadenas de control para depurar el programa mejor hacerlo con fprintf(stderr, cadena_mensaje_error, ...);

La razón es que la escritura a stderr se muestra directamente por pantalla o donde sea que apunte stderr, mientras que si se escribe a stdout el mensaje se guarda en búffer y C lo libera cuándo cree conveniente. Y eso es la razón de la existencia de fflush(descriptor_del_flujo_de_salida), para forzar que se libere el buffer de forma inmediata.
« Última modificación: 23 Marzo 2016, 18:56 pm por MAFUS » En línea

JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Re: [C][?] No se ejecutan printf
« Respuesta #3 en: 23 Marzo 2016, 19:55 pm »

El código completo es
Código:
/*Título: Ejercicio 2 
 *Descripción: Calcula el cambio a base decimal, octal y hexadecimal
 *Autor: José Luis Garrido Labrador (JoseluCross)
 *Version: 1.0 - mar/16
 */

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

int     clean_stdin(void);
void    cambioBinario(int);
void    imprimeResultado(int);

int main() {
  int     n; //Número que añadiremos
  char    c; //Carácter de control
  bool    control = false; //Variable para el control de entrada

  do {
    printf("Introduce un número en base decimal: ");
    if(scanf("%d%c", &n, &c) != 2 || c != '\n') {
      printf("El número %d%c no es válido\n", n, c);
      clean_stdin();
      control = false;
    } else {
      printf("prueba");
      if(n >= 0) {
printf("El binario de %d es: ", n);
cambioBinario(n);
//cambioOctal(decimal);
//cambioHex(decimal);
control = true;
      }
    }
  } while(control == false || n < 0);

  return 0;
}

//Función para la limpieza del buffer del teclado
int clean_stdin() {
  while(getchar() != '\n') ;
  return 1;
}

/*
 *Nombre: cambioBinario
 *Descripción: Convierte un número decimal a binario
 *@param n: número que convertiremos
 *@author: JoseluCross
 */
void cambioBinario(int n) {
  int     x = 1; //Variable de longitud
  //Asignamos tamaño de cifras que tendrá el número en binario
  for(x = 1; pow(2,x) > n; x++) ;
  int     tam[x]; //El vector donde almacenaremos las cifras (para este procedimiento no se usará recursividad)
  int     p = 0; //Variable de posición
  //Bucle para la asignación de cifras binarias
  for(p = 0; p = x; p++) {
    tam[p] = n % 2;
    n = n / 2;
  }
  //Bucle para el envío a imprimir
  for(p = x; p = 0; p--) {
    imprimeResultado(tam[p]);
  }
  printf("\n");
}

/*
 *Nombre: imprimeResultado
 *Descripción: imprime el resultado de cada cambio
 *@param a: valor que se imprimirá
 *@author: JoseluCross
 */
void imprimeResultado(int a) {
  printf("%d", a);
}
En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: [C][?] No se ejecutan printf
« Respuesta #4 en: 23 Marzo 2016, 22:34 pm »

Fallos en tu código:
Línea 60
Código
  1. for(p = 0; p = x; p++)
Línea 65
Código
  1. for(p = x; p = 0; p--)
Estos fors están mal formulados, como puedes ver donde debe haber la comparación hay una asignación.

Por cierto, haciendo uso de operadores adecuados, como el de desplazamientos de bits y evitando funciones redundantes como la imprimeResultado y clean_stdin puedes reducir el tamaño del código menos de la mitad.
En línea

JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Re: [C][?] No se ejecutan printf
« Respuesta #5 en: 25 Marzo 2016, 15:07 pm »

Muchas gracias, era ese el problema. Gracias también por el consejo.
En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SDL mixer + SDL ttf; No se ejecutan
Programación C/C++
Puntoinfinito 0 1,453 Último mensaje 20 Enero 2013, 13:47 pm
por Puntoinfinito
No se me ejecutan los alias
GNU/Linux
danny920825 7 3,026 Último mensaje 4 Junio 2015, 00:55 am
por MinusFour
[Ayuda]: ¿Por qué MouseOver & MouseOut no ejecutan la función?
Desarrollo Web
Miguelcarp14 1 2,000 Último mensaje 11 Febrero 2018, 01:44 am
por engel lex
No me ejecuta el printf
Programación C/C++
GonzaJava 5 3,166 Último mensaje 13 Abril 2018, 18:39 pm
por GonzaJava
Implementación de printf no termina con null las cadenas
Programación C/C++
huchoko 8 2,557 Último mensaje 8 Abril 2019, 03:29 am
por huchoko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines