Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lotux5 en 12 Mayo 2013, 17:45 pm



Título: Como usar cin.ignore()
Publicado por: Lotux5 en 12 Mayo 2013, 17:45 pm
Alguien me explica como usar cin.ignore(). Ya se que consta de 2 parametros. por ejemplo:

cin.ignore(1000,'\n') ---> Esto hace que ignore todos los caracteres hasta que encuentra un salto de linea.

Pero lo que quiero que me expliquen (si es posible) es como usarlo para que ignore una serie de caracteres determinados. Por ejemplo:

Si creo una cadena con cin.getline(c,1000,EOF) dentro e esa cadena como hago para "ignorar" linea que empieze por '#', osea, una serie de de caracteres que empiece con el caracter '#' y acabe con '\n'.

Gracias.


Título: Re: Como usar cin.ignore()
Publicado por: amchacon en 12 Mayo 2013, 18:33 pm
Lee el primer caracter de cada línea, si encuentra un # usa getline para "comerte la linea":
Código
  1. cin.getline (char* s, streamsize n, char delim );

En char delim pon '\n'




Título: Re: Como usar cin.ignore()
Publicado por: rir3760 en 12 Mayo 2013, 18:46 pm
cin.ignore(1000,'\n') ---> Esto hace que ignore todos los caracteres hasta que encuentra un salto de linea.
No exactamente. Con esa llamada se descarta un máximo de mil caracteres, pueden ser menos si se encuentra el carácter '\n' o se alcanza el final del archivo. Y si la linea contiene mas de mil caracteres no se descarta la linea completa.

Pero lo que quiero que me expliquen (si es posible) es como usarlo para que ignore una serie de caracteres determinados.
No es posible ya que no se conoce de antemano el contenido de la linea.

Si creo una cadena con cin.getline(c,1000,EOF)
Un problema es, con esa llamada a función, lees un máximo de mil caracteres sin importar de cuantas lineas se traten (pueden ser varias).

dentro e esa cadena como hago para "ignorar" linea que empieze por '#', osea, una serie de de caracteres que empiece con el caracter '#' y acabe con '\n'.
Tienes que leer una linea, por ejemplo con getline:
Código
  1. char linea[1000];
  2.  
  3. // ...
  4.  
  5. cin.getline(linea, 1000); // El delimitador es '\n'

A continuación buscas el primer carácter que no sea espacio blanco y procedes según sea el caso.

Un programa de ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <cctype>
  7. using std::isspace;
  8.  
  9. int main()
  10. {
  11.   char linea[1000];
  12.   size_t i;
  13.  
  14.   cin.getline(linea, 1000);
  15.   for (i = 0; isspace(linea[i]); i++)
  16.      ;
  17.   if (linea[i] == '\0')
  18.      cout << "Linea en blanco";
  19.   else
  20.      cout << "El primer caracter es " << linea[i];
  21.   cout << endl;
  22.  
  23.   return 0;
  24. }

Una mejor aproximación es utilizar la clase string (http://www.cplusplus.com/reference/string/string/).

Un saludo