Introducción a C++

1

Todo lo que aprenderás sobre C++

2

¿Qué es programar y por qué aprender C++?

Conceptos Generales de C++

3

La Historia de C++ y sus diferencias con C

Preparando el entorno de trabajo

4

Instalando Codeblocks

5

Pasos para instalar en mac

6

Ejecutando nuestro primer programa

7

¿Qué son las librerías STD? - Portada del Proyecto

Manejo de memoria

8

¿Qué es la memoria y tipos de datos?

9

Alojando variables en memoria

10

¿Cómo usar operadores?

11

¿Qué son los apuntadores?

12

Reto: Escribir un programa que calcule áreas.

Entrada de datos y funciones

13

¿Cómo introducir datos a nuestro programa?

14

¿Cómo usar condicionales?

15

Usando condicionales

16

¿Cómo encapsular código en funciones ?

17

¿Qué son los parámetros y como usarlos?

18

Reto: Juego narrativo implementando condicionales y entrada de datos.

Loops y arreglos

19

¿Qué son los arreglos?

20

¿Qué son los Loops?

21

Programando Loops

22

Loops , arreglos y arreglos bidimensionales

23

Dibujando el mapa de nuestro juego con arreglos

24

Manipulando mi jugador con inputs en arreglos unidimensionales

25

Arreglos bidimensionales

26

Reto: Moviendo a mi personaje en mi arreglo bidimensional

Lectura de Archivos

27

Creando y leyendo un archivo externo

28

Leyendo archivos externos

29

Reto: En el mapa, crear punto de inicio y salida del jugador

Programación Orientada a Objetos

30

¿Qué es POO?

31

Definiendo una clase y creando sus instancias

32

Encapsulación

33

Abstracción

34

Herencia

35

Propiedades de clase en herencia

36

Polimorfismo

Finalizando nuestro proyecto

37

Creación de personaje y archivo de encabezado

38

Moviendo mi personaje con entrada de datos

39

Mapa

40

Interacción entre el personaje y el mapa

41

Paredes

42

Optimizando trazado de mapa

43

Colisiones

44

Creando nuestra portada de juego

45

Tesoro y victoria

46

Conclusiones

47

Proyecto final

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Leyendo archivos externos

28/47
Recursos

Aportes 36

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

No imprime el nombre porque se empieza a comparar el valor de Renglon a partir de 1 y no 0. Debería evaluarse primero la expresión del bloque if y después incrementar Renglon.

A los que hayan jugado “Doki Doki Literature Club”, La mecanica del juego de hecho invita al jugador a modificar algunos de estos archivos para poder avanzar en el juego o incluso cambiar la historia. No voy a contar para evitar Spoilers pero los invito a investigar sobre la creatividad de este juego a los interesados del tema 😃

Joe mencciona la documentacion pero no lei en ningun lado que este, asi que la dejo aca: http://www.cplusplus.com/reference/fstream/ifstream/?kw=ifstream

![]()

*Mis apuntes sobre: “Leyendo archivos externos”:
ifstream -->sirve para lectura de datos
ifstream myFileRead(“gameData.txt”) -->leyendo un archivo
getline() --> permite conseguir un flujo de caracteres hasta que haya un endl.

Les comparto mi código:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
/*    ofstream myFile("gameData.txt");
    string playerName;
    if(myFile.is_open())
    {
        myFile<<"Hi Platzi"<<endl;
        myFile<<"My name is:"<<endl;
        cout<<"Enter your hero name: ";
        cin>>playerName;
        myFile<<playerName;
    myFile.close();
    }
*/
    ifstream myFileRead("gameData.txt");
    string line, heroName;
    int renglon=0;

    if(myFileRead.is_open())
    {
        while(getline(myFileRead,line))
        {
            if(renglon==2)
            {
                heroName=line;
            }
            renglon++;
        }
    }
    else
    {
        cout<<"I couldn't open the file, check antivirus"<<endl;
    }
    cout<<"Welcome to your adventure: "<<heroName<<endl;
        return 0;
}

Al parecer la función getline() fue movida a la librería string, y no se encuentra en la librería fstream. No sé pero me funcionó.

#include <string>

El error creo que fue por la posición de

            Renglon = Renglon + 1;

Ya que en el vídeo (y en mi programa) cuando se mueve ese comando hacia despues de if( Renglon == 2 ) y no antes, el error desaparece

Mi versión:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
typedef unsigned int uint;
int main() {

    fstream miArchivo; // archivo read and write

    auto * ptexto = new string;
    string texto = "Me gusta el curso de Platzi";
    ptexto = &texto;

    miArchivo.open("DataJuego.dat",
            ios::out // para escribir
            |ios::ate // va al final del archivo
            |ios::app // un enter al abrirlo
            //|ios::binary // en modo binario (con .write)
    );

    if(miArchivo.is_open()){
        miArchivo << endl << *ptexto;
    } else {
        cout << "No se ha creado el archivo o no se pudo abrir" << endl;
    }
    miArchivo.close();

    miArchivo.open("DataJuego.dat",
                   ios::in
            //|ios::binary
    );

    if(miArchivo.is_open()){
        string linea;
        while (getline(miArchivo, linea)){
            cout << linea << endl;
        }
    } else {
        cout << "No se ha creado el archivo o no se pudo abrir" << endl;
    }


    miArchivo.close();

    delete ptexto;

    return 0;
}

Los peores errores son los que sabes porque funcionan!

            Renglon = Renglon + 1;

También puede ser escrito como:

            Renglon += 1;

o como:

            Renglon++;
#include <iostream> /*Libreria de entradas y salidas*/
#include <fstream> /*Libreria para crear y leer archivos externos*/

using namespace std;

int main()
{
    /*Para crear archivos lo usaremos para crear una variable*/
    //Sirve para la salida de datos
    ofstream MyFile("GameData.txt");
    string PlayerName = "";

    if (MyFile.is_open()){

            MyFile << "Hello world!" << endl;
            MyFile << "Mi Nombre es !" << endl;
            cout <<"Introduce el nombre de tu Herue" <<endl;
            cin >> PlayerName;
            MyFile << PlayerName;
           /* for(int i = 0; i<10; i++ ){
                MyFile << i << endl;
            }*/

    }
    MyFile.close(); /*Buena Practica cerrarlo*/

    //Sirve para la entrada de datos
    ifstream MyFileRead("GameData.txt");
    string line;
    string NombreDelHeroe = "";
    int Renglon = 0;

    if (MyFileRead.is_open())
    {
        while (getline(MyFileRead, line)){

            Renglon = Renglon + 1;
            if (Renglon == 3){
                NombreDelHeroe = line;
            }
        }
    }else
    {
        cout << "no logre abrir mi archivo" << endl;

    }
    cout << "Bienvenido a tu aventura:" << endl;
    cout << NombreDelHeroe << endl;

    return 0;
}```

Si les aparece error al poner el getline() solo agreguen la librería string para solucionarlo 😃

#include <string>

solo con cambiar la posición de reglón al 3 ya se arreglaba

Acabo de poner (sin querer) la velocidad del video en 0.5x
.
Da la impresión de que estuviera borracho el profe. Es muy gracioso 😂😂😂

Si necesitan guardar 2 o mas palabras separadas por espacio, lo pueden hacer de la siguiente manera:

getline(cin, NombreDelHeroe);

Genial 😄

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
	ofstream MiArchivo("GameData.txt");
	string JugadorNombre = "";

	if (MiArchivo.is_open())
	{
		cout << "Ingresa tu nombre: ";
		cin >> JugadorNombre;
		MiArchivo << JugadorNombre;
	}

	MiArchivo.close();

	ifstream MiArchivoLectura("GameData.txt");
	string line;
	string NombreJugador = "";
	int renglon = 0;

	if (MiArchivoLectura.is_open())
	{
		while (getline(MiArchivoLectura, line))
		{
			renglon = renglon + 1;

			if (renglon == 1)
			{
				NombreJugador = line;
			}
		}
	}

	else
	{
		cout << "Error al abrir el archivo.";
	}

	cout << "Bienvenido " << NombreJugador;

	return 0;
}
#include <iostream>
#include <fstream> /*guardar en memoria*/
#include <stdlib.h>

/*
ofstream crear flujos de escritura
open/close
*/

using namespace std;

int main()
{
/*
    ofstream MyFile("guardar.txt");

    if(MyFile.is_open())
    {
        MyFile<<"Hola mundo"<<endl;
     MyFile<<"soy arturo"<<endl;

    }
        MyFile.close();


 ofstream MyFile("guardar.txt");
string PlayerName="";
    if(MyFile.is_open())
    {
        MyFile<<"Hola mundo"<<endl;
     MyFile<<"Tu nombre es:"<<endl;

     cout<<"introduce tu nombre"<<endl;
     cin>>PlayerName;
     MyFile<<PlayerName;

    }
        MyFile.close();

*/
    ifstream MyFileRead("guardar.txt");
    string line;
    string NombreDelHeroe="";
    int Renglon=0;

    if(MyFileRead.is_open())
    {
        while(getline(MyFileRead, line))
        {

          if(Renglon==2)
          {
              NombreDelHeroe=line;
          }
 Renglon=Renglon+1;
        }
    }
    else
    {
        cout<<"no logre abrir archivo"<<endl;
    }

    cout<<"welcome"<<endl;
    cout<<NombreDelHeroe;
return 0;
}

¡Buen consejo! De ahora en adelante me meteré a los archivos a manipular cosas esperando sucedan cosas Jajajaja

muy util

HECHO 😃

#include <iostream>
#include <fstream>//libreria generica creada para el manejo, escritura y lectura de archivos externos al programa.

using namespace std;

int main()
{
        ofstream file("game.txt");
        string PlayerName ="";
    if(file.is_open())
    {
        file<<"hola platzi"<<endl;
        file<<"mi nombre es:"<<endl;


         cout<<"introduce el nombre de tu heroe";
         cin>>PlayerName;
         file<<PlayerName;
    }
    file.close();

    ifstream fileRead("game.txt");//
    string line;
    string NombreH = " ";//recupera el nombre del heroe y lo guarda aqui
    int Renglon = 0;
    if(fileRead.is_open())
    {
        while (getline(fileRead,line))/*getline()es una funcion de los caracteres que nos permite conseguir una linea
         de carateres en un flujo de datos hasta un endl;*/
    {

        if(Renglon==2)
        {NombreH=line;}

        Renglon++;
    }
        }

    else{cout<<"no logre abrir mim archivo, checar el antivirus"<<endl;}

cout<<"bienvenido a tu aventura:"<<endl;
cout<<NombreH<<endl;

    return 0;
}
#include <iostream>
#include <fstream>

using namespace std;

int main() {

    ofstream myFile("GameData.txt");
    string playerName;

    if ( myFile.is_open() ) {
        myFile << "Hola, mundo!" << endl;

        myFile << "nombre del jugador: " << endl;

        cout << "Cual es tu nombre?: ";
        cin >> playerName;
        myFile << playerName;
    }

    myFile.close();

    ifstream myFileRead("GameData.txt");

    string line;
    string nombreHeroe;
    int renglon = 0;


    if ( myFileRead.is_open() ) {
        while ( getline( myFileRead, line ) ) {
            renglon++;
            if ( renglon == 3 ) {
                nombreHeroe = line;
            }
        }

        cout << "Bienvenido a tu aventura: " << endl;
        cout << nombreHeroe << endl;

    }

    return 0;
}
/*
    Compilar así:clang++ source.cpp -o source.out     
*/

#include <iostream>
#include <fstream>

using namespace std;

int main() {

    ofstream MyFile("GameData.txt");
    string PlayerName = "";

    if ( MyFile.is_open() ) {
        MyFile << "Hola Platzi" << endl;
        MyFile << "Mi nombre es:" << endl;

        cout << "Introduce el nombre de tu héroe: ";
        cin >> PlayerName;
        MyFile << PlayerName;
    }

    MyFile.close();

    ifstream MyFileRead("GameData.txt");
    string line;
    string NombreDelHeroe = "";
    int Renglon = 0;

    if ( MyFileRead.is_open() )
        while ( getline (MyFileRead, line) ){
            if ( Renglon == 2)
                NombreDelHeroe = line;
            Renglon++;
        }
    else
        cout << "Error opening file" << endl;

    cout << "Bienvenida a tu aventura: " << NombreDelHeroe << endl;
    return 0;
}
#include<iostream>
#include<fstream>

using namespace std;

int main(){

    ofstream MyFile("GameData.txt");
    string PlayerName = "";

    if ( MyFile.is_open() ) {
        MyFile << "Hola Platzi" << endl;
        MyFile << "Mi nombre es: "<<endl;

        cout << "Introduce el nombre de tu heroe: ";
        cin >> PlayerName;
        MyFile << PlayerName;
    }

    MyFile.close();

    ifstream MyFileRead("GameData.txt");
    string line;
    string NanemHero = "";
    int Renglon = 0;

    if ( MyFileRead.is_open() )
        while ( getline (MyFileRead, line) ){

            if ( Renglon == 2)
                NanemHero = line;
            Renglon++;
        }
    else
        cout << "Error al abrir" << endl;
        MyFileRead.close();

    cout << "Bienvenida a tu aventura: " << NanemHero << endl;
    return 0;
}```

Yo le quite un renglón y funciono.
Pero la verdad, no me queda muy claro que hace la función getline

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
   ofstream MyFile("GameData.txt");
   string NameHero = "";

   if(MyFile.is_open())
    {
        MyFile << "Hola" << endl;
        cout << "Escribe el nombre de tu heroe"<< endl;
        cin >> NameHero;
        MyFile << NameHero << endl;
    }

        MyFile.close();

    ifstream MyFileRead("GameData.txt");
    string line;
    string NombreDelHeroe = "";
    int renglon = 0;

    if(MyFileRead.is_open())
        {
            while(getline(MyFileRead, line))
                {
                    renglon = renglon + 1;
                    if(renglon == 2)
                        {
                            NombreDelHeroe = line;
                        }

                    cout<< line << endl;
                }
        }

    return 0;
}

Hice la prueba ambiando manualmente el archivo .txt y plasmo exactamente lo que había modificado en ese archivo, esto da pie a crear muchas cosas. Excelente curso.

Impresionante

paso2

Segunda parte del video

Aporte: Tambien puedes modificar los archivos como por ejemplo cuando descargas un juego y el nickname del personaje no te deja cambiarlo puedes hacerlo con esto, en algunos casos podras modificar muchas mas cosas como, lenguaje del juego (en el caso que este disponible). Exp por matar mobs, estadisticas del personaje etc… Todo dependera de que tan abierto esten esos archivos.

cin>>: Lee unicamente la informacion o el texto libre hasta llegar al utlimo caracter que es \0.

getline(): Es una funcion de la libreria <string>, su uso es leer toda la cadena de texto junto con sus espacios y guardarla en una variable. su forma de usarla es:

*getline(cin, variable)

–> Entonces con esto estamos mandando a leer la linea de texto libre y guardando su valor completo en la variable.

getline(). es un cin>> con mucha mas potencia!!!

buena clase

Gracias!

# include <iostream>
# include <fstream> // File stream

using namespace std; 

int main()
{
    ofstream MyFile("GameData.txt"); // Crear archivo, out file stream
    string PlayerName = "";

    if (MyFile.is_open())
    {
        MyFile << "Hola Platzi!" << endl;
        MyFile << "Introduce el nombre de tu heroe: " << endl;
        cin >> PlayerName;
        MyFile << PlayerName; 
    }
    MyFile.close();

    ifstream MyFileRead("GameData.txt"); // in file stream
    string line;
    string NombreDelHeroe;
    int Renglon = 0;

    if(MyFileRead.is_open())
    {
        while(getline(MyFileRead, line))
        {
            cout << line << endl;
            Renglon++;

            if (Renglon == 3)
            {
                NombreDelHeroe = line;
            }
        }
    }
    else
    {
        cout << "No logre abrir mi archivo, check el antivirus!" << endl;
    }

    cout << "Bienvenida a tu aventura " << endl;
    cout << NombreDelHeroe << endl;

    return 0;
}

Si desean capturar un texto con espacios en la misma variable lo pueden hacer de la siguiente manera:

getline(cin, NombreDelHeroe);
aqui guardara lo que escriban hasta que den un enter