Saltar de linea al leer de un fichero

Iniciado por hari, 13 Julio 2011, 01:24 AM

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

hari

Buenas,
estaba haciendo un programa, que lea caracteres de un fichero y los escriba de otro de manera que solo lea la primera palabra de cada linea.

Código (cpp) [Seleccionar]

char buffer;

while(!fi.eof()){
fi >> buffer;
cout << buffer << endl;
while(buffer != ' '){
fo << buffer;
fi >> buffer;
cout << buffer << endl;
}
fo << endl;

}




Lo que no se, es como hago para "saltar de linea" en el fichero de lecura.

Muchas gracias

.:BlackCoder:.

Puedes leer en una cadena el resto de lo que queda en la linea, con getline... o preferiblemente, usa el metodo ignore() de los istream...
http://www.cplusplus.com/reference/iostream/istream/ignore/

Saludos
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




rir3760

Para procesar y descartar manualmente el espacio blanco puedes utilizar el manipulador "noskipws", por ejemplo:
#include <iostream>
using std::cout;
using std::endl;
using std::noskipws;

#include <fstream>
using std::ifstream;

#include <cctype>
using std::isspace;

int main()
{
   ifstream entrada("Entrada.txt");
   entrada >> std::noskipws;
   
   bool descartar = false;
   char ch;
   while (entrada >> ch) {
      if (!descartar) {
         if (!isspace(ch) )
            cout << ch;
         else {
            cout << endl;
            descartar = true;
         }
      }
     
      if (ch == '\n')
         descartar = false;
   }
   entrada.close();
   
   return 0;
}



Una mejor opcion como ya indico .:BlackCoder:. es utilizar la funcion miembro "ignore", por ejemplo:
#include <iostream>
using std::cout;
using std::endl;

#include <fstream>
using std::ifstream;

#include <limits>
using std::numeric_limits;

#include <string>
using std::string;

int main()
{
   ifstream entrada("Entrada.txt");
   string palabra;
   
   while (entrada >> palabra) {
      cout << palabra << endl;
      entrada.ignore(numeric_limits<int>::max(), '\n');
   }
   entrada.close();
   
   return 0;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

hari

gracias! creo que usare ignore().
Muchas gracias a los dos!