Buenos días, tengo un trabajo práctico para hacer que necesito que, si me pasan un nombre de archivo, lo abra y lea de ahí y sino, que lea de la entrada estándar, la idea es usar la misma variable. En C era fácil, asignada stdin a un FILE*, pero en C++ tengo un ifstream* y no me deja asignarle la entrada estándar (cin), alguien sabe cómo se hace esto?
Muchas gracias!
prueba esto
espero qeu te sirva
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, char *argv[]) {
char c, str[256];
ifstream arc;
cout << "Nombre del archivo: ";
cin.getline (str,256);
arc.open (str);
while (arc.good())
{
c = arc.get();
if (arc.good())
cout << c;
}
flse:
return 0;
}
Pero eso es lectura desde el archivo directamente, si no entendí mal el código.
Lo que quiero hacer es tener una variable a la que le pueda asignar un archivo de entrada o CIN, entonces después puedo llamar a una función que tome la entrada independientemente de si es un archivo normal o la entrada estándar, algo así:
#include <iostream>
#include <fstream>
int main (int argc, char *argv[]) {
ifstream* archivoEntrada;
if (argc > 2) {
archivoEntrada = new ifstream(argv[1]);
}else {
archivoEntrada = std::cin;
}
leerLinea(archivoEntrada);
return 0;
}
as compilado el codigo?
lo que hace este codigo es lo siguiente
Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos l
C:\Users\David\Desktop>g++ z.cpp //Compilo el codigo
C:\Users\David\Desktop>a //Lo ejecuto
Nombre del archivo: z.cpp //Le indico un archivo (en este caso el que compile)
//Y lee el archivo
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, char *argv[]) {
char c, str[256];
ifstream arc;
cout << "Nombre del archivo: ";
cin.getline (str,256);
arc.open (str);
while (arc.good())
{
c = arc.get();
if (arc.good())
cout << c;
}
flse:
return 0;
}
C:\Users\David\Desktop>
Nop, que es lo de flse?
Cita de: Lauta en 6 Octubre 2012, 20:27 PM
Nop, que es lo de flse?
es un label de un goto que borre. Y se quedo allí, no me di cuenta
Ahí lo compilé, definitivamente no es lo que necesito. Esto es lo que necesito:
Cita de: Lauta en 6 Octubre 2012, 20:03 PM
Lo que quiero hacer es tener una variable a la que le pueda asignar un archivo de entrada o CIN, entonces después puedo llamar a una función que tome la entrada independientemente de si es un archivo normal o la entrada estándar, algo así:
#include <iostream>
#include <fstream>
int main (int argc, char *argv[]) {
ifstream* archivoEntrada;
if (argc > 2) {
archivoEntrada = new ifstream(argv[1]);
}else {
archivoEntrada = std::cin;
}
leerLinea(archivoEntrada);
return 0;
}
pues no entendi lo k querias.
Pongo el ejemplo que digo que hice en C:
if (argc > 1) {
archivoEntrada = fopen(argv[1], "r");
} else {
archivoEntrada = stdin;
}
Si me pasan el argumento por consola, abro el archivo, sino, asigno la entrada estándar, pero siempre uso la misma variable.
En caso que a alguien le pase lo mismo:
std::istream* archivoEntrada;
if (nomArchEntrada.compare("-") == 0) {
archivoEntrada = &std::cin;
}else {
archivoEntrada->open(nomArchEntrada.c_str(), std::ios::in);
}