Problema con getline en Visual C++ 6.0
Hola, el programa es este:
#include <iostream>
#include <string.h>
#include "Formula.h"
void main(){
string cadena;
Formula *frm;
cout<<"Verificador de Formulas Bien Formadas"
<<"nnClave:"
<<"n / = negacion"
<<"n & = y"
<<"n | = o"
<<"n > = entonces"
<<"n * = si y solo si"
<<"nnTeclea "salir" para terminar el programa";
cout<<"nnInsertar Formula: ";
getline(cin,cadena);
while(cadena != "salir"){
frm=new Formula(cadena);
if(frm->esFormulaBienFormada())
cout<<" [Es formula bien formada]";
else
cout<<" [No es formula bien formada]";
cout<<"nnInsertar Formula: ";
getline(cin,cadena);
}
}
Y el problema es que al insertar la primera formula con el getline requiere de presionar dos veces enter para continuar. Despues de ello, cada que introduzco una cadena con getline ya solo requiere presionar una vez enter, pero siempre esta una cadena atrasada.
#include <iostream>
#include <string.h>
#include "Formula.h"
void main(){
string cadena;
Formula *frm;
cout<<"Verificador de Formulas Bien Formadas"
<<"nnClave:"
<<"n / = negacion"
<<"n & = y"
<<"n | = o"
<<"n > = entonces"
<<"n * = si y solo si"
<<"nnTeclea "salir" para terminar el programa";
cout<<"nnInsertar Formula: ";
getline(cin,cadena);
while(cadena != "salir"){
frm=new Formula(cadena);
if(frm->esFormulaBienFormada())
cout<<" [Es formula bien formada]";
else
cout<<" [No es formula bien formada]";
cout<<"nnInsertar Formula: ";
getline(cin,cadena);
}
}
Y el problema es que al insertar la primera formula con el getline requiere de presionar dos veces enter para continuar. Despues de ello, cada que introduzco una cadena con getline ya solo requiere presionar una vez enter, pero siempre esta una cadena atrasada.
Yo no encuentro una razón por la que debas presionar dos veces la tecla "enter", pero puedo señalarte alguna posibilidad:
1.- La función main() devuelve un entero, así que debes poner
int main()
Algunos compiladores aceptan que se escriba mal (void main() ) pero no hay ninguna garantía de que sigan haciéndolo en su próxima versión.
2.- El tipo de dato "string" está declarado en la biblioteca estándar <string>, y no en <string.h>
Cambia la cabecera por
#include <string>
cin, cout, string, están declarados en el espacio de nombres estándar, así que de alguna manera hay que indicárselo al compilador. Si tu código no es muy extenso, puedes poner
using namespace std;
o alguna de sus variantes (como std::cout << ..., etc.)
3.- Es posible que el sistema operativo retenga las peticiones de salida (de cout) en un buffer antes de mostrarlas, así que prueba poniendo un "endl" para forzarlo a que las "barra", por ejemplo en:
cout<<"nnInsertar Formula: " << endl;
Alejandro
1.- La función main() devuelve un entero, así que debes poner
int main()
Algunos compiladores aceptan que se escriba mal (void main() ) pero no hay ninguna garantía de que sigan haciéndolo en su próxima versión.
2.- El tipo de dato "string" está declarado en la biblioteca estándar <string>, y no en <string.h>
Cambia la cabecera por
#include <string>
cin, cout, string, están declarados en el espacio de nombres estándar, así que de alguna manera hay que indicárselo al compilador. Si tu código no es muy extenso, puedes poner
using namespace std;
o alguna de sus variantes (como std::cout << ..., etc.)
3.- Es posible que el sistema operativo retenga las peticiones de salida (de cout) en un buffer antes de mostrarlas, así que prueba poniendo un "endl" para forzarlo a que las "barra", por ejemplo en:
cout<<"nnInsertar Formula: " << endl;
Alejandro
