C ++

Administrar la consola con las clases de iostream en C ++

Administrar la consola con las clases de iostream en C ++

En informática, la consola es el teclado de la computadora y el monitor de la computadora. En el pasado, la salida se enviaba directamente a la pantalla del monitor y no a una ventana que se mostraba en el monitor. Para el usuario de computadora común, las aplicaciones actuales no usan el monitor explícitamente. Estas aplicaciones utilizan ventanas que se muestran en el monitor. Sin embargo, el programador de la computadora aún necesita usar la pantalla del monitor. Aunque el programador todavía necesita usar la pantalla del monitor, el sistema operativo no le permite hacerlo. El sistema operativo proporciona una ventana que simula la pantalla del monitor. En el sistema operativo Windows, esta ventana se llama Símbolo del sistema. En el sistema operativo Linux y sus variantes, esta ventana se llama terminal.

Se espera que el lector ya sepa cómo usar el Símbolo del sistema o la Terminal. Este artículo explica cómo leer caracteres y cadenas desde el teclado y enviar caracteres y cadenas a la terminal (o símbolo del sistema). Todo programador de C ++ necesita saber en este artículo.

Para tener entrada desde el teclado y salida al terminal, el programa debe comenzar con:

#incluir
usando el espacio de nombres std;

Contenido del artículo

  • Objetos de flujo estrecho del iostream estándar
  • Obtener caracteres y cadenas del teclado
  • Visualización y eliminación de caracteres antes de presionar Enter
  • Envío de caracteres y cadenas al monitor
  • Argumentos a favor de un programa C ++
  • Conclusión

Objetos de flujo estrecho del iostream estándar

La clase iostream, los objetos estándar, cout, cin, cerr y clog, se han instanciado y ya están en la biblioteca estándar. El programador simplemente los usa sin instanciarlos nuevamente.

cout

La siguiente declaración en la función main () envía el texto, "Esto es salida.”A la terminal:

cout << "This is output.";

cout es un objeto iostream de salida en la biblioteca estándar, ya instanciado. << is the insertion operator, which sent the bytes, “This is output.” to the output stream object, cout. When the statement is executed, the text appears on the screen.

Con la declaración anterior, el símbolo del sistema que se vuelve a mostrar aparece a la derecha de la frase de salida. No pasa a la siguiente línea. "Endl" al final de la siguiente declaración forzará todo lo que se imprima en la pantalla a la siguiente línea:

cout << "This is output." << endl;

"Endl" es una variable predefinida. El contenido de la pantalla también se puede forzar a la siguiente línea con:

cout << "This is output." << '\n';

Con el uso de '\ n', es posible que todas las líneas de texto aún no aparezcan en la pantalla inmediatamente. "Endl" arroja la línea completa de texto a la pantalla.

Nota: una cadena enviada a cout está entre comillas dobles, mientras que un carácter enviado está entre comillas simples. Se puede enviar una serie de cadenas y caracteres en una declaración, cada una precedida por << . All that will appear in one line at the output if '\n' is not in the series.

cin

cin es el objeto de entrada estándar de iostream, ya instanciado y disponible en la biblioteca estándar. Considere el siguiente segmento de código en la función main ():

char txt [50];
cout << "Enter a word and press Enter:" <> TXT;
cout << txt << endl;

La primera declaración declara una matriz vacía de 50 caracteres. La segunda declaración le indica al usuario que escriba una palabra en la siguiente línea de la pantalla y presione la tecla Intro. Tenga en cuenta el uso de "endl" que obliga al usuario a ingresar texto en la siguiente línea de la pantalla. A medida que el usuario escribe texto, el texto ingresado se repite en la pantalla mientras ingresa al objeto cin. Después de presionar Enter, se ejecuta la tercera instrucción en el segmento de código. Esta tercera declaración envía el texto ingresado a la variable, txt. El texto ingresado no debe tener más de 50 caracteres en este caso. Tenga en cuenta el uso del operador de extracción, >>. La última declaración muestra el texto ingresado en la pantalla.

cin puede tomar más de una palabra del teclado, separadas por espacios. Estas palabras deberán extraerse en diferentes variables. El siguiente segmento de código ilustra esto:

char txt [20];
int it;
flotar ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << txt << " << it << " << ft << endl;

Tenga en cuenta la declaración:

cin >> txt >> it >> ft;

La primera palabra se extrae a txt, la siguiente y la última a ft. Si la entrada fue,

uno 25 3.6

entonces la salida del segmento de código sería,

uno 25 3.6

cerr

El siguiente programa tiene un error:

#incluir
usando el espacio de nombres std;
int main ()

en myInt;
return 0;

La primera declaración en main () no es correcta. Si el nombre del archivo que tiene el código es "temp.cc ”y el archivo ejecutable resultante se llamará“ temp ”, luego el siguiente comando g ++ enviará el mensaje de error del compilador al archivo,“ error.TXT":

g ++ -o temp temp.cc 2> error.TXT

Si el archivo "error.txt ”no existe, se crearía. Tenga en cuenta la parte "2> error.txt ”del comando g ++.

La pantalla es el destino de salida estándar y también es el destino de error estándar. Si "2> error.txt ”se omite del comando g ++, entonces el mensaje de error del compilador se enviará al destino de error estándar, que sigue siendo la pantalla (monitor).

El objeto de flujo que representa el destino de salida estándar es cout. El objeto de flujo que representa el destino de error estándar es cerr. Se puede enviar un error de tiempo de ejecución del programa a la pantalla de la siguiente manera:

cerr << "The error message!" << '\n';

obstruir

Una aplicación toma diferentes entradas en diferentes momentos. Todas las entradas se pueden volver a mostrar en la pantalla. Todas las entradas se pueden guardar en un archivo. Esto es registro. El destino de registro estándar es la pantalla. El objeto de flujo de registro estándar es una obstrucción. El siguiente código volverá a mostrar el texto ingresado en la pantalla:

char txt [50];
cout<<"Enter text and press Enter:"<>TXT;
obstruir<Si el texto de entrada es "input_text", entonces clog volvería a mostrar "input_text" en la pantalla.

En la práctica, el registro suele redirigirse a un archivo. El siguiente programa ilustra esto:

#incluir
usando el espacio de nombres std;
int main ()

freopen ("registro.txt "," w ", salida estándar);
cout << "input_text" << endl;

Tenga en cuenta el uso de la función, freopen () y sus argumentos. Su primer argumento es el nombre del archivo de registro. Si el archivo no existe, se crearía. Su segundo argumento es "w" para "escribir". Su tercer argumento es stdout para salida estándar. La segunda instrucción en la función main () usa cout para enviar el texto de registro al archivo. Nota: El código de entrada real no se ha mostrado en este programa.

Obtener caracteres y cadenas del teclado

Mientras el usuario escribe una entrada, los caracteres se envían al búfer de flujo de entrada y se muestran en la pantalla. Cuando el usuario presiona la tecla Enter, todos los caracteres están en el búfer; Además, el cursor va al principio de la siguiente línea a continuación, en la pantalla. El programa luego continúa con la siguiente instrucción de programa, después de la instrucción de lectura de entrada.

El objeto cin tiene métodos, de los que se ocupa esta sección.

Leyendo el primer carácter

obtener (char_type & c):
El siguiente segmento de código muestra cómo leer el primer carácter del búfer de flujo de entrada:

char ch;
cout << "Input text:" << endl;
cin.obtener (ch);
cout << ch << endl;

La primera declaración declara un personaje sin asignación. La segunda declaración le dice al usuario que ingrese un carácter. Cuando el usuario escribe un carácter y presiona la tecla Enter, la tercera declaración copia el carácter del búfer de flujo de entrada en la variable, ch.

Incluso si el usuario ingresó más de un carácter, el segmento de código tomaría el primer carácter.

obtener():
get () sin argumento, devuelve el código ASCII decimal. Considere el siguiente segmento de código:

cout << "Input text:" << endl;
cout << cin.get() << endl;

Si la entrada es "asdfg", se devolverá 97, que es el código ASCII decimal para 'a'.

get (char_type * s, streamsize n)

Después de que el usuario ingresa una frase y presiona la tecla Enter, se pueden extraer varios caracteres comenzando por el primero, del búfer de secuencia de cin. Se puede utilizar el siguiente código:

char str [10];
cout << "Input text:" << endl;
cin.obtener (str, 10);
cout << str << endl;

Si la entrada es "grandes personas", la salida será "grandes personas", de 9 caracteres y no de 10. La cadena de caracteres NUL (\ 0) ocupa la décima posición en el argumento get. Entonces, para tener 9 caracteres en str, su tamaño de almacenamiento debe ser de al menos 10 y el argumento get () debe ser 11. Si se desea la línea de entrada completa, entonces el número de almacenamiento de la cadena debe ser al menos el número de caracteres escritos, más 1. Entonces, si se escriben 12 caracteres para toda la línea, entonces el número debe ser 13 para el tamaño de almacenamiento de la cadena (str) y 13 para el argumento get (). Tenga en cuenta que un espacio se cuenta como un carácter.

get (char_type * s, streamsize n, char_type delim)
Es posible extraer una subcadena, delimitada a la derecha, por la primera aparición de un carácter en particular, o por el tamaño de secuencia de la subcadena, lo que ocurra primero. Si el texto de entrada para el siguiente código es "grandes personas", entonces se extraería "genial":

char str [30];
cout << "Input text:" << endl;
cin.obtener (str, 6, 'o');
cout << str << endl;

La sexta posición desde el principio es el carácter de espacio, y delimita la subcadena extraída exclusivamente. La sexta posición viene primero antes del único carácter, 'o'. Tenga en cuenta que el tamaño de almacenamiento para str puede ser lo más alto posible.

Si el texto de entrada del siguiente código es "grandes personas", se extraerá "gr":

char str [30];
cout << "Input text:" << endl;
cin.obtener (str, 10, 'e');
cout << str << endl;

La primera aparición de 'e', ​​viene primero antes de la décima posición.

Obtener todos los caracteres de una línea

Después de presionar la tecla Enter, todos los caracteres escritos en la línea se pueden obtener como se muestra en el siguiente código:

cout << "Input text:" << endl;
while (1)
char ch = (char) cin.obtener();
cout << ch;
si (ch == '\ n')
rotura;

La conversión con (char), convierte cada número decimal en el carácter ASCII correspondiente.

ojeada()

Las funciones miembro get () no solo leen el siguiente carácter; lo eliminan del búfer de flujo. Sin embargo, la función miembro peek () lee el siguiente carácter (comenzando por el primero) sin eliminarlo del búfer. En el siguiente código, cada carácter se lee primero con la función peek () antes de ser eliminado, mediante la función get (). Todo lo que sucede después de que el usuario presiona la tecla Enter:

cout << "Input text:" << endl;
while (1)
char ch = (char) cin.ojeada();
cout << ch;
cin.obtener();
si (ch == '\ n')
rotura;

Si los siguientes caracteres no fueron eliminados por get (), peek () solo leería el primer carácter y el ciclo se repetirá indefinidamente.

Visualización y eliminación de caracteres antes de presionar Enter

Tenga en cuenta que con el objeto cin, se debe presionar la tecla Enter antes de que haya acción. Bueno, es posible que los caracteres se muestren mientras se escriben y borran antes de presionar la tecla Enter. Sin embargo, eso significa interactuar con el sistema operativo. Los sistemas operativos difieren. Entonces esto significa una codificación diferente para diferentes sistemas operativos. Así que este tema merece un tutorial completamente diferente - ver más adelante.

Envío de caracteres y cadenas al monitor

El objeto cout es un objeto de flujo de salida, ya instanciado y presente en la biblioteca estándar de C ++. cout es el objeto principal utilizado para enviar caracteres y cadenas al monitor. Esto se hace con el operador de inserción, << . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until '\n' or endl is encountered.

Las expresiones que dan como resultado escalares pueden ser argumentos para el operador de inserción. El operador convierte el escalar en texto y coloca el texto en el flujo de objetos cout. Cuando se envía texto al objeto cout, normalmente aparece en la pantalla (monitor). Sin embargo, en ocasiones, es posible que no aparezca de inmediato. Para forzar texto en la pantalla, inserte el valor especial, "endl", justo después de insertar el texto. Esto hará que el texto se vacíe en la pantalla y se agregará una nueva línea. Nota: '\ n' simplemente agrega una nueva línea pero no arroja texto a la pantalla.

El siguiente programa muestra cómo imprimir los valores de int, float y texto ordinario en la pantalla:

#incluir
usando el espacio de nombres std;
int main ()

int it = 5;
pies flotantes = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
return 0;

La salida es:

Los 5 artículos cuestan $ 63.5 EE. UU.

El siguiente programa muestra cómo se imprime la cadena de un objeto instanciado de una clase:

#incluir
usando el espacio de nombres std;
struct St
char str [11] = "algunas palabras";
obj;
int main ()

cout << obj.str << '\n';
return 0;

El resultado es "algunas palabras".

Argumentos a favor de un programa C ++

La ejecución del programa comienza desde la función main (). La función main () en realidad tiene dos parámetros opcionales. La sintaxis de la función main () con los parámetros opcionales es:

int main (int argc, char * argv [argc])

return 0;

Suponga que el nombre del archivo ejecutable de C ++ es "temp". Suponga que los argumentos que el programa necesita de su entorno (sistema operativo), escritos por el usuario, son,

artículos 3 libro bolígrafo "casa grande"

Aquí hay 5 argumentos: "artículos", "3", "libro", "bolígrafo" y "casa grande"

Cada uno es texto. Un argumento numerado de un programa es texto. En otras palabras, cada argumento es una cadena. "Casa grande" está entre comillas porque es una frase. El comando de terminal para ejecutar este programa sería:

./ artículos temporales 3 bolígrafo de libro "casa grande"

Suponiendo que la temperatura del archivo está en el directorio de inicio. Tenga en cuenta que los espacios y no las comas separan los argumentos.

Ahora, en la sintaxis de la función main (), argc es el número de argumentos del programa, más 1. En este caso, hay 5 argumentos para el programa. Entonces, argc es 6. En la sintaxis, argv [argc] es una matriz de punteros a cadenas. El primer valor para esta matriz en argv [0] lo da el compilador. Es un puntero al nombre del archivo de programa. El resto de los valores son punteros a los argumentos del programa en el orden del usuario escrito en. El tamaño de esta matriz es argc. En este caso el tamaño es 1 + 5 = 6.

Suponga que en la compilación, el siguiente programa se llama temp:

#incluir
usando el espacio de nombres std;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
return 0;

Tenga en cuenta aquí, que la matriz "char * argv [argc]", ha sido declarada como "char ** argv".

Si este programa se ejecuta con el comando de terminal,

./ artículos temporales 3 bolígrafo de libro "casa grande"

entonces la salida sería:

./ temp, artículos, 3, libro, bolígrafo, casa grande

Tenga en cuenta que la ruta del directorio se ha incluido con el nombre del archivo ejecutable.

Además, tenga en cuenta que en la ejecución del programa (llamada del programa), el valor de argc no se ha enviado.

Conclusión

La clase iostream tiene cuatro objetos importantes que son cout, cin, cerr y clog. cin es un objeto de entrada, mientras que el resto son objetos de salida. Mientras un programa se está ejecutando, la entrada al programa es diferente de cuando el programa debe comenzar a ejecutarse. Cuando un programa comienza a ejecutarse, la entrada al programa se une con el comando para ejecutar el programa, separados por espacios.

Cómo usar GameConqueror Cheat Engine en Linux
El artículo cubre una guía sobre el uso del motor de trucos GameConqueror en Linux. Muchos usuarios que juegan juegos en Windows a menudo usan la apli...
Los mejores emuladores de consola de juegos para Linux
Este artículo enumerará el software de emulación de consola de juegos más popular disponible para Linux. La emulación es una capa de compatibilidad de...
Las mejores distribuciones de Linux para juegos en 2021
El sistema operativo Linux ha recorrido un largo camino desde su apariencia original, simple y basada en servidor. Este sistema operativo ha mejorado ...