Scanf hace que el programa C se bloquee

1 minuto de lectura

avatar de usuario
BKCOHEN

Este simple problema está causando que todo mi programa se bloquee durante la primera entrada. Si elimino la entrada, el programa funciona bien, pero una vez que agrego scanf en el código e ingreso la entrada, el programa falla.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXEMPS 3


// stub program code
int main (void){
    char answer;

    do
    {

        printf("\n Do you have another(Y/N): ");
        scanf("%c", answer);
    }while(answer == 'Y' || answer == 'y');

    getchar();
    printf("  Press any key ... ");
    return 0;
} // main

  • fflush(stdin) (o cualquier otro flujo para el que se ingresó la última operación) no está definido por el Estándar. Si está utilizando Windows, la operación está bien definida … pero si su código alguna vez se va a compilar en cualquier otro Sistema Operativo, tendrá un error que podría evitar en este momento. No fflush(stdin)!

    – pmg

    26 de noviembre de 2011 a las 19:53

  • Gracias por la información sobre fflush, mi profesor nos pide que la usemos.

    – BKCOHEN

    26 de noviembre de 2011 a las 20:09

  • Hmm … el idioma estándar equivalente es int flushstdin(void) { int ch; while (((ch = getchar()) != '\n') && (ch != EOF)) /* void */; return ch == EOF ? EOF : 0; }. Habla con el profesor y úsalo en su lugar.

    – pmg

    26 de noviembre de 2011 a las 20:26

Debe pasar la dirección de la variable a scanf:

 scanf("%c", &answer);

Utilice “&respuesta”. Y deshazte de los extraños comandos “fflush()”…

Mejor, sustituya “respuesta = getchar ()”.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad