Foros del Web » Programación para mayores de 30 ;) » Programación General »

pedir datos al usuario varias veces

Estas en el tema de pedir datos al usuario varias veces en el foro de Programación General en Foros del Web. Hola amigos, estoy empezando a ver C y tengo un pequeño problema con este programa que calcula el cociente y resto de la division entre ...
  #1 (permalink)  
Antiguo 28/10/2005, 17:49
 
Fecha de Ingreso: septiembre-2005
Mensajes: 32
Antigüedad: 18 años, 8 meses
Puntos: 0
pedir datos al usuario varias veces

Hola amigos, estoy empezando a ver C y tengo un pequeño problema con este programa que calcula el cociente y resto de la division entre dos enteros que ingrese el usuario. Es muy tonto pero lo que quiero hacer es que el programa de la posibilidad de volver a ingresar valores si es que el usuario ingreso caracteres en lugar de numeros. Esto es lo que tengo:

int main(void) {

int s, x, y, q, r;

printf("ingresa 2 numeros");
s = scanf("%i" "%i", &x, &y);

if(s == 2) {
q = 0;
r = x;

do {
q = q+1;
r = r-y;
} while (r>=y);

printf("cociente: %i, resto: %i\n", q, r);
}

system("PAUSE");

}

Quiero hacer que el programa pida que el usuario ingrese dos numeros y que si recibe valores equivocados (algo que no sean numeros, o solo un número) le vuelva a pedir dos numeros, pero antes borrar el bufer. Sé que esta función limpia el bufer:

int clearbuf(void) {
int c;
c = 1;

while(c!= '\n');
c = getchar();

}

Pero no sé en que parte llamarla. Recien empiezo con C, je.. Eso es todo, si alguien me puede dar una mano se lo agradezco desde ya. Saludos!
  #2 (permalink)  
Antiguo 29/10/2005, 02:34
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Podes hacer un bucle parecido a este:

Código:
  for (;;)
  {
    printf("ingresa 2 numeros");
    s = scanf("%i" "%i", &x, &y);
    if (s == 2) { break; }
    fflush(stdin);
  }
  //Aca el resto del codigo
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 29/10/2005, 12:08
 
Fecha de Ingreso: septiembre-2005
Mensajes: 32
Antigüedad: 18 años, 8 meses
Puntos: 0
Hola, Eternal Idol, gracias por tu respuesta, el bucle me funciono perfecto. Aunque yo había leído en este sitio http://home.golden.net/~uberkermit/c...er_input.shtml que usar fflush(stdin) no era correcto:

Cita:
There are ways to deal with clearing the stdin when using scanf(), some are good, some are mediocre. Some methods are completely incorrect. We will only discuss the latter briefly. It is incorrect to use the fflush() function in this way:

fflush(stdin);

Many people believe that using fflush() in this manner is an effective way to clear the input stream, however the C standard states that fflush() is intended for the output stream, (stdout), and as such, if it is used with the stdin the behaviour is undefined, meaning it might work the way you want it to, or it might do something else. If you have been taught to use fflush(stdin), know that it is incorrect.
Por eso quisiera usar la funcion clearbuf(); no es un capricho es que me dijeron que la tenía que implementar en algun lado xD, pero no se donde invocarla.
  #4 (permalink)  
Antiguo 29/10/2005, 13:11
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por Smithy
Hola, Eternal Idol, gracias por tu respuesta, el bucle me funciono perfecto. Aunque yo había leído en este sitio http://home.golden.net/~uberkermit/c...er_input.shtml que usar fflush(stdin) no era correcto:
Ese sitio habla sobre C y cita fuentes de los años 80, supongo que tendras un compilador de este siglo (lease VC++) y por eso te funciona perfectamente al igual que a mi. Su documentacion dicle claramente: "Flushes a stream."

Cita:
Iniciado por Smithy
Por eso quisiera usar la funcion clearbuf(); no es un capricho es que me dijeron que la tenía que implementar en algun lado xD, pero no se donde invocarla.
Esa funcion no creo que exista, ni siquiera figura en la MSDN.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:03.