| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
reytux
Registrado: 28 Sep 2007 Mensajes: 9 Ubicación: ARGENTINA-JUJUY
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |
 |
|
|