¿Por qué se duplica el cout?

Iniciado por asa5, 12 Diciembre 2017, 01:35 AM

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

asa5

Hola, tengo el siguiente problema:
Estoy haciendo un programa que me diga uno a uno si los caracteres introducidos (como una palabra completa) pueden ser identificadores, pero el problema es que cuando se topa con un carácter que no es letra o número me dice que sí puede ser identificador y acto seguido me dice que no puede ser identificador.

#include <iostream>
using namespace std;

bool EsLetra_Numero_OGuionBajo(char caracter) {
 bool esletra_numero_oguionbajo;

 if ((caracter >= 'a' && caracter <= 'z') ||
     (caracter >= 'A' && caracter <= 'Z') ||
     (caracter >= '0' && caracter <= '9' || caracter == '_')) {
   esletra_numero_oguionbajo = true;
 } else {
   esletra_numero_oguionbajo = false;
 }

 return esletra_numero_oguionbajo;
}

int main() {
 bool es=true;

 char caracter, centinela = '.';
 cout << "Introduzca palabras para saber si puede ser un identificador, "
         "finalice con '.' cuando quiera cerrar el programa."
      << endl;
 cin >> caracter;

 if (EsLetra_Numero_OGuionBajo(caracter)) {
   cout << caracter << " puede formar parte de un identificador." << endl;
 } else {
   cout << caracter << " no puede formar parte de un identificador." << endl;
 }

 while (es && caracter != centinela) {
   if (EsLetra_Numero_OGuionBajo(caracter) == false) {
     cout << caracter << " no puede formar parte de un identificador." << endl;

     es = false;
   } else if (EsLetra_Numero_OGuionBajo(caracter)) {
     cin >> caracter;

     cout << caracter << " puede formar parte de un identificador." << endl;
   }
 }
}




Gracias de antemano.

EDITO: Era el cout, debía ponerlo fuera del if.