Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: UnchainedGold40 en 22 Marzo 2015, 22:40 PM

Título: Ayuda fflush
Publicado por: UnchainedGold40 en 22 Marzo 2015, 22:40 PM
Hola, tengo una duda con el buffer, estaba haciendo una pila, entonces se me ocurrio poner 2 push, luego 2 pops, luego 2 push y por ultimo 2 pops, pero el ejecutable recibio los 4 push y luego imprimió los 4 pops, me dijeron que era por el buffer, y que tenía que poner fflush(stdout); sin embargo sigue pasando lo mismo :(#include <bits/stdc++.h>

using namespace std;

template <typename tipo>
struct pila{
    int numero;
    int tope=0;
    vector<tipo>dato;
    void setSize(int n){
        dato.resize(n);
    }
    void push(){
        if(tope<dato.size()){
            cin >> numero;
            dato[tope]=numero;
            tope++;
        }else{
            throw overflow_error ("Pila llena");
        }
    }
    void pop(){
        if(tope>0){
            tope--;
            cout << dato[tope];
        }else{
            throw underflow_error ("Pila vacia");
        }
    }
};
pila<int>Fila;
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    Fila.setSize(2);
    Fila.push();
    Fila.push();
    Fila.pop();
    Fila.pop();
    fflush(stdout);
    Fila.push();
    Fila.push();
    Fila.pop();
    Fila.pop();
    return 0;
}
Título: Re: Ayuda fflush
Publicado por: NOIS en 23 Marzo 2015, 05:22 AM
Tendrías que vaciar el buffer de entrada, ya que el usuario introduce los datos por teclado, usa fflush(stdin);

Saludos!
Título: Re: Ayuda fflush
Publicado por: eferion en 23 Marzo 2015, 12:56 PM
Cita de: NOIS en 23 Marzo 2015, 05:22 AM
Tendrías que vaciar el buffer de entrada, ya que el usuario introduce los datos por teclado, usa fflush(stdin);

Saludos!

fflush no se debe usar para vaciar un buffer de entrada. fflush está diseñado para limpiar buffers de salida. En el caso de los buffer de entrada el resultado es indeterminado. Para más información, consulta este otro tema (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)