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

usando cin.get() no funciona,no se limpiar el buffer

Estas en el tema de usando cin.get() no funciona,no se limpiar el buffer en el foro de C/C++ en Foros del Web. Hola a todos: un saludo de un novato que se ha puesto a aprender c++!!! mi problema es que siguiendo un curso he conseguido hacer ...
  #1 (permalink)  
Antiguo 07/08/2009, 06:17
 
Fecha de Ingreso: agosto-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
usando cin.get() no funciona,no se limpiar el buffer

Hola a todos:
un saludo de un novato que se ha puesto a aprender c++!!!
mi problema es que siguiendo un curso he conseguido hacer mi 1º programa pero
necesito que este se espere a una pulsacion de tecla para poder ver los resultados antes de que se cierre
uso cin.get(),y en programas de ejemplo he visto que funciona,pero en el mio parece que tengo que limipar el buffer por que al ejecutarse se salta la linea (viendo en el debuger)
mi codigo:

#include <iostream>
#include<iomanip>
#include<fstream>
using namespace std;
int main (void)
{
int i=0;
int vector[10];
int suma,mayor,menor=0;
float promedio;


for(i=0;i<10;i++)
{
cin>>vector[i];

}
mayor=vector[0];
menor=vector[0];
suma=0;


for(i=0;i<10;i++)
{
if(vector[i]<menor)
menor=vector[i];
if(vector[i]>mayor)
mayor=vector[i];
suma=suma+vector[i];

}
promedio = float(suma)/10;

cout<<"suma "<<suma<<endl;
cout<<"mayor "<<mayor<<endl;
cout<<"menor "<<menor<<endl;
cout<<"promedio "<<promedio<<endl;


cin.get();// mi problema
return 0;
}


me podia decir alguien como controlar el buffer y forzar al programa a espera esa pulsacion de tecla????

muchas gracias y un saludo
  #2 (permalink)  
Antiguo 07/08/2009, 08:37
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

hola y bienvenido al foro

te recomiendo usar mejor el getch()

mira este link donde aparece como utilizarlo

http://www.conclase.net/c/Borland/funcion.php?fun=getch

saludos
  #3 (permalink)  
Antiguo 07/08/2009, 09:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

muchas gracias ,ya funciona!!!
de todos modos creo leí por la web que conio no es una libreria standas de ansi(o como se llame eso),y estando en fase de aprendizaje creo que me interesa saber tambien el otro camino.
podrias darme el codigo cin.get();???

saludotes
  #4 (permalink)  
Antiguo 07/08/2009, 21:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

#include<stdio.h>

y luego haz un getchar(); esta si es una funcion estandar.
  #5 (permalink)  
Antiguo 09/08/2009, 03:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

con getchar no me ha funcionado,y he incluido el include.......
de todos modos es que creo que deberia ir aprendiendo eso de limpiar el buffer y controlar los flujos(o como se llame) ya que ,por lo que veo, si no, en un programa mas largo me voy a encontrar estancado cuando no me vaya alguna entrada o salida bien
¿podriais decirme la limpieza de buffer cin??

Siento ser taaaann pesao.....solo es afan por mejorar ,asi que disculpas y un saludo!!!
  #6 (permalink)  
Antiguo 09/08/2009, 11:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

#include <stdio.h>

fflush( stdin ); //Borrar el buffer
cin.get(); //Problema resuelto

Edito: Esto solo funciona para scanf :p

Última edición por razpeitia; 09/08/2009 a las 12:06
  #7 (permalink)  
Antiguo 09/08/2009, 12:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

Despues de darle una pequeña leida al buen tutorial de c++

Ya encontre la solucion :p
Código C++:
Ver original
  1. #include <iostream>
  2. #include<iomanip>
  3. #include<fstream>
  4. #include <string>
  5. #include <sstream>
  6. using namespace std;
  7.  
  8. int main (){
  9.     int i=0;
  10.     int vector[10] = {0};
  11.     int suma,mayor,menor=0;
  12.     float promedio;
  13.      string buffer;
  14.  
  15.     for(i = 0; i < 10; i++){
  16.         cout << "[" << i + 1 << "] = ";
  17.         getline(cin, buffer);
  18.         stringstream(buffer) >> vector[i];
  19.     }
  20.     mayor=vector[0];
  21.     menor=vector[0];
  22.     suma=0;
  23.  
  24.     for(i=0;i<10;i++){
  25.         if(vector[i]<menor)
  26.             menor=vector[i];
  27.         if(vector[i]>mayor)
  28.             mayor=vector[i];
  29.         suma=suma+vector[i];
  30.     }
  31.     promedio = suma/10.0;
  32.  
  33.     cout << "suma " << suma << endl;
  34.     cout << "mayor " << mayor << endl;
  35.     cout << "menor " << menor << endl;
  36.     cout << "promedio " << promedio << endl;
  37.     cin.get();// Ya no es problema
  38.     return 0;
  39. }
  #8 (permalink)  
Antiguo 11/08/2009, 04:31
 
Fecha de Ingreso: agosto-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: usando cin.get() no funciona,no se limpiar el buffer

muchas gracias, ahi ando peleando con el programa a ver si puedo añadir lo nuevo al final para no tener que cambiar todas las entradas con cin>>var
a ver si maquineando lo consigo


he añadido esto al final del programa

cout<<"promedio "<<promedio<<endl;


string buffer,myvar;//esto lom puse arriba en declaracion de vars


cout<<"pulse una tecla";
getline(cin, buffer);
stringstream(buffer) >> myvar;
// getch();

por ahora toy atascao enque al compilar tengo este error

47 C:\Documents and Settings\Administrador\Escritorio\1.cpp no match for 'operator>>' in 'stringstream(((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(&buffer))), std::operator|((std::_Ios_Openmode)16u, (std::_Ios_Openmode)8u)) >> myvar'


bueno, ya he abusado de la paciencia de todo bicho viviente, asi que gracias por las varias solucicones y un saludo
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 22:16.