Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Revisar fin de ingreso de datos - C

Estas en el tema de Revisar fin de ingreso de datos - C en el foro de C/C++ en Foros del Web. Tengo un problema, con el "Desea ingresar mas datos?". Cada vez que uno pone SI (de continuar), imprime 2 veces la frase "Desea ingresar mas ...
  #1 (permalink)  
Antiguo 17/09/2010, 23:08
Avatar de Spike_ak  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 442
Antigüedad: 17 años, 3 meses
Puntos: 0
Revisar fin de ingreso de datos - C

Tengo un problema, con el "Desea ingresar mas datos?".
Cada vez que uno pone SI (de continuar), imprime 2 veces la frase "Desea ingresar mas datos?".

Se que se puede usar algo asi para evitarlo:

Código:
void limpiarBuffer(){
	char c[255];
	int a = getchar();
	if (a !=10) scanf("%s",c);
}
pero hice algo mas simple como esto:

Código:
#include<stdio.h>

void main(){
	char r='o';
	int op=1;
while (op==1){
	while(r=='o'){
		printf("Ingresar mas datos?: ");
		scanf("%c",&r);

		if(r=='s'){
		r='s';}

		if(r=='n'){
		r='n';}

		if((r!='n')&&(r!='s')){
		r='o';}

	}

		if(r=='s'){
		printf("SI");
		op=1;
		r='o';
		}

		if(r=='n'){
		printf("NO");
		op=0;}
}
}
y sigo teniendo ese problema, de la frase repetida.

Tengo que usar funciones de C unicamente.
Y por si no se entendio, quiero una funcion para saber si el usuario desea ingresar ams datos o no; en verdad quiero solucionar lo de la frase repetida.

Uso Borland C++ 4.0.
__________________
*****************************************
la Ignorancia es la fuerza
  #2 (permalink)  
Antiguo 17/09/2010, 23:30
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 12 años, 2 meses
Puntos: 461
Respuesta: Revisar fin de ingreso de datos - C

bueno te indico el problema cuando entras primero al bucle le haces esa pregunta, cuando afirmas le dices que vuelva a entrar al bucle en que momento limpias la pantalla?? te lo va a imprimir tantas veces le digas que si mientras no limpies esta espero te sea de ayuda el comentario saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 18/09/2010, 22:40
Avatar de Spike_ak  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 442
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Revisar fin de ingreso de datos - C

Ahhh, se podia interpretar de otra forma mi problema. Aca dejo una imagen apra que se entienda:

http://img838.imageshack.us/img838/1565/repetido.jpg

__________________
*****************************************
la Ignorancia es la fuerza
  #4 (permalink)  
Antiguo 18/09/2010, 23:31
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 12 años, 2 meses
Puntos: 461
Respuesta: Revisar fin de ingreso de datos - C

la imagen que colocas me da la razon cada vez que le dices que si le dices que entre al bucle
Cita:
if(r=='s'){
printf("SI");
op=1;
r='o';

}
en donde te hic la negrita entonces el vuelve a evaluar si op=1 y r='o' como ambas son ciertas te vuelve a imprimir el mensaje
Cita:
printf("Ingresar mas datos?: ");
como no has limpiado la pantalla anterior a esto cada vez que digas que si te va a mostrar esto que tienes que hacer para resolver el problema limpiar la pantalla en este momento
Código C:
Ver original
  1. if(r=='s'){    
  2.                 printf("SI");
  3.         op=1;
  4.         r='o';
  5.                 system("clear");//esto limpia la pantalla en linux busca una funcion nativa de c++ para hacerlo creo que clrscr() lo hace tambien no recuerdo bien
  6.         }
con eso solucionarias tu problema ya que el mensaje se imprimira tantas veces como indique que si, si no limpias la pantalla te apareceran uno debajo del otro siempre saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 18/09/2010, 23:49
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 14 años, 5 meses
Puntos: 260
Sonrisa Respuesta: Revisar fin de ingreso de datos - C

Hola,

Existe algo mas a tomar en cuenta en este caso, los retornos de carro y nueva línea, la función scanf no los extrae del buffer. Como este otro caso.

Código:
void limpiarBuffer(){
	char c[255];
	int a = getchar();
	if (a !=10) scanf("%s",c);
}
El 10 en la tabla ASCII significa 'nueva línea'. Que no lo puedas ver, no significa que no esté allí y que no lo tengas que extraer del buffer.

Código:
printf("Ingresar mas datos?: ");
scanf("%c",&r);
getchar();
Saludos,

Etiquetas: ingreso, revisar
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 10:03.