/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

problemas con el bucle while

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
reytux



Registrado: 28 Sep 2007
Mensajes: 9
Ubicación: ARGENTINA-JUJUY

MensajePublicado: 03/10/2007 11:07 am
Título: problemas con el bucle while

El codigo que les muestro a continuacion funciona bien, pero no del todo.

Lo que ocurre es que el mensaje que muestro en pantalla, me lo muestra dos veces y recien me pide que ingrese el caracter.

#include<stdio.h>
int main()
{
char resp=' ';

while(resp>'9' || resp<'0')
{
printf("\n\nIngrese un caracter y presione enter:");
printf("\nPara salir ingrese cualquier digito: ");
scanf("%c",&resp);
}
return 0;
}
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 379
Ubicación: Cono Sur

MensajePublicado: 03/10/2007 2:03 pm
Título:

Hola

La verdad es que tu código no está bien implementado.

ANSI C
Código:

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

int main(void)
{
    char resp;
    int ch;
    do
    {
        printf("\nIngrese un caracter y presione enter: ");
        scanf("%c",&resp);
        while((ch=fgetc(stdin))!=EOF && ch!='\n'); /* Limpia el bufer de entrada */
    }
    while(resp>'9' || resp<'0');
    puts("\n\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}



C NO ESTANDAR

Código:

#include <stdio.h>
#include <conio.c>
#include <stdlib.h>

int main(void)
{
    char resp;
    int ch;
    do
    {
        printf("\nIngrese un caracter y presione enter: ");
        scanf("%c",&resp);
        while((ch=fgetc(stdin))!=EOF && ch!='\n');
    }
    while(resp>'9' || resp<'0');
    printf("\nPara salir ingrese cualquier digito: ");
    getch();
    return EXIT_SUCCESS;
}


Un saludo
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 03/10/2007 2:34 pm
Título:

Sin querer pecar de pedante entrometido, se puede codear en C estándar usando librerías de terceros, la única regla es seguir la semántica, sintaxis y léxico del lenguaje. Luego esta que uno quiera usar la biblioteca estandar, con sus definiciones de funciones formales para todo compilador.
De hecho el lenguaje no tiene concepto de pantalla, teclado, dispositivos I/O, etc.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3841
Ubicación: Mexico

MensajePublicado: 03/10/2007 4:06 pm
Título:

El problema con tu programa es que la funcion scanf al utilizarse con el indicador de tipo "%c" no ignora el espacio blanco y el caracter '\n' (generado por el usuario al presionar {ENTER}) se procesa generando el segundo mensaje.

Una variacion ligeramente distinta de la presentada por digies es (C estandar):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void)
{
   char resp;
   int ch;
   
   do {
      printf("Ingrese un caracter y presione {ENTER}: ");
      fflush(stdout)
      if (scanf("%c", &resp) != 1)
         return EXIT_FAILURE;
     
      while ((ch = getchar()) != EOF && ch != '\n')
         ; /* descartamos el resto de la linea */
   }while (!isdigit(resp));
   
   system("pause");
   
   return EXIT_SUCCESS;
}


En cuanto a programar solo en C estandar u optar por C estandar mas extensiones no hay problema siempre y cuando el programador este conciente de lo que esta haciendo en especial de los efectos de las extensiones no solo en librerias (por ejemplo conio) sino tambien en el propio lenguaje (assembly en linea, funciones en linea, etc.).

Como este no es (en mi opinion) un tema que deba tratar un principiante en C (ya tiene suficiente con punteros y demas) lo mejor es enseñarle solo C estandar.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com