Ayuda fflush

Iniciado por UnchainedGold40, 22 Marzo 2015, 22:40 PM

0 Miembros y 1 Visitante están viendo este tema.

UnchainedGold40

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;
}

NOIS

Tendrías que vaciar el buffer de entrada, ya que el usuario introduce los datos por teclado, usa fflush(stdin);

Saludos!
NOIS dev7

eferion

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