6.9 KiB
title | localeTitle |
---|---|
Input and Output | Entrada y salida |
Entrada y salida con flujos
Para imprimir cosas en la consola, o leerlas, utiliza cout
y cin
, que se denominan streams
. Esta metáfora se usa porque usa flujos como si usara un sumidero, o un toque: puede vaciar los datos en un sumidero ( cout
), u obtener datos de un toque ( cin
).
Salida con cout
El programa "Hello World" usa cout
para imprimir "Hello World!" a la consola:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
}
Las primeras dos líneas en la parte superior son necesarias para que uses cout
y otras transmisiones. #include<iostream>
hace que los objetos de la corriente sean imposibles de using namespace std;
, y using namespace std;
le permite escribir cout
directamente en lugar de tener que escribir std::cout
, es decir, tener que especificar que queremos usar cout
desde el std
nombres std
.
cout
significa "Salida de consola" y es el llamado flujo de salida que representa la consola. Cuando quiera imprimir algo en la consola, puede ponerlo en cout
; Imagínalo como un agujero que conduce a la terminal. Para colocar cosas en este orificio, una a la vez, use el operador <<
, también conocido como el operador de inserción 1 . El operador puede estar encadenado, es decir, puede poner varias cosas una tras otra. Lo siguiente imprimirá "El pastel es una mentira".
cout << "The cake " << "is " << "a " << "lie." << endl;
endl
significa "End Line" y es otro elemento que proviene de <iostream>
. Cuando coloque endl
en cout
, imprimirá un carácter de nueva línea ("\ n") en la consola, y también borrará cout
, lo que significa que forzará a cout
a imprimir todo lo que haya puesto en él ahora . Si no pone endl
en cout
, cout
puede conservar los datos que ha endl
pero esperar más datos antes de imprimirlos todos. Esto se denomina almacenamiento en búfer y es muy bueno para el rendimiento, pero si ya le ha dado todo lo que se supone que debe imprimir, desea que cout
imprima de inmediato. Por lo tanto, es una buena práctica terminar con el endl
en lugares donde tenga sentido.
Casi todo se puede poner en una secuencia: cadenas, números, variables, expresiones, etc. Aquí se muestran algunos ejemplos de inserciones de secuencias válidas:
// Notice we can use the number 42 and not the string "42".
cout << "The meaning of life is " << 42 << endl;` // Output: The meaning of life is 42
string name = "Tim";
cout << "Except for you, " << name << endl;`// Output: Except for you, Tim
string name = "Tim";
cout << name;
cout << " is a great guy!" << endl;`
// Output: Tim is a great guy!
int a = 3;
cout << a*2 + 18/a << endl;`// Output: 12
Una nota sobre los espacios en blanco.
C ++ siempre te pone en control, y solo hace exactamente lo que le dices que haga. Esto a veces puede ser sorprendente, como en el siguiente ejemplo:
string name = "Sarah";
cout << "Good morning" << name << "how are you today? << endl;
Podría esperar que se imprima "Buenos días, Sarah, ¿cómo estás hoy?", Pero en realidad, la salida sería "Buenos días, Sarah, ¿cómo estás hoy?". El motivo de este error es que no escribió espacios en las cadenas que rodean el name
, por lo que, como no especificó ningún espacio, cout
no imprimió ninguno. La versión correcta sería: cout << "Good morning " << name << " how are you today? << endl;
Los saltos de línea no ocurren por sí mismos, tampoco. Podría pensar que esto imprimiría una receta en cuatro líneas:
cout << "To make bread, you need:";
cout << "* One egg";
cout << "* One water";
cout << "* Two wheat";
pero la salida es en realidad todo en una línea: "Para hacer pan, necesitas: * Un huevo * Un agua * Dos trigo". Esto se debe a que no hay caracteres de nueva línea al final de las líneas, por lo que, naturalmente, C ++ asume que no queremos que se impriman caracteres de nueva línea.
Podría arreglar esto agregando endl
s después de cada línea, porque como se endl
anteriormente, endl
inserta un carácter de nueva línea en la secuencia de salida. Sin embargo, también obliga a vaciar el búfer, lo que nos hace perder un poco de rendimiento, ya que podríamos haber impreso todas las líneas de una sola vez. Por lo tanto, lo mejor sería agregar caracteres de nueva línea al final de las líneas, y solo usar endl
al final:
cout << "To make bread, you need:\n";
cout << "* One egg\n";
cout << "* One water\n";
cout << "* Two wheat" << endl;
Si solo imprime una receta pequeña, el tiempo que guarda es minúsculo y no vale la pena, pero si imprime millones de artículos, la diferencia podría ser muy notable.
Entrada con cin
Para leer desde la consola, utiliza el flujo de entrada cin
de la misma manera que lo haría con cout
, pero en lugar de poner las cosas en cin
, las "saca". El siguiente programa lee dos números del usuario y los suma:
#include<iostream>
using namespace std;
int main()
{
int a, b; // Variables to hold the two numbers.
cout << "Please enter the first number:" << endl;
cin >> a;
cout << "Please enter the second number:" << endl;
cin >> b;
cout << "The sum of your numbers is: " << a + b << endl;
}
cin
significa "entrada de consola" y es un flujo de entrada que representa la entrada desde la consola. En la expresión cin >> a;
, los datos se leen desde cin
y se guardan en la variable a
, utilizando el operador >>
, el operador de extracción 2 . El operador de extracción lee exactamente la cantidad de datos necesarios para escribir en la variable que especificamos y omite los espacios en blanco, por lo que si el usuario escribe "6", se leerá como el valor 6
.
Vale la pena señalar que cin
detendrá todo el programa para esperar a que el usuario ingrese su valor. El programa no continuará hasta que el usuario haya presionado Intro, y hay algunos datos que se escribirán en la variable. Si el usuario solo presiona Intro sin escribir nada, cin
seguirá esperando un valor.
El operador de extracción <<
se puede encadenar. Este es el mismo programa que la última vez, pero escrito de una manera más concisa:
#include<iostream>
using namespace std;
int main()
{
int a, b; // Variables to hold the two numbers.
cout << "Please enter two numbers:" << endl;
cin >> a >> b;
cout << "The sum of your numbers is: " << a + b << endl;
}
Cuando está encadenado, el operador de extracción primero leerá los datos de cin
para rellenar a
, y luego leerá los datos para rellenar b
.
Las declaraciones estándar printf y scanf de C también se pueden usar con c ++ importando ' ' archivo de cabecera.