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

Managing Console With Iostream Classes C



En informática, la consola es el teclado 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 de manera explícita. 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 ++ debe saberlo en este artículo.







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



#incluir
utilizando espacio de nombreshoras;

Contenido del artículo

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.



costo

La siguiente declaración en la función main () envía el texto, This is output. a la terminal:





costo << 'Esto es salida'.;

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:



costo << 'Esto es salida'. <<endl;

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

costo << 'Esto es salida'. << ' orte';

Con el uso de ' n', es posible que aún no todas las líneas de texto aparezcan en la pantalla de inmediato. endl lanza 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 ‘ ’ is not in the series.

Ginebra

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 ():

carbonizarseTXT[50];
costo << 'Ingrese una palabra y presione Enter:' TXT;
costo <<TXT<<endl;

La primera declaración declara una matriz vacía de 50 caracteres. La segunda instrucció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:

carbonizarseTXT[20];
En teso;
flotadorpie;
costo << 'Ingrese 3 valores y presione Enter:' TXT>>eso>>pie;
costo <<TXT<< ' ' <<eso<< ' ' <<pie<<endl;

Tenga en cuenta la declaración:

Ginebra >>TXT>>eso>>pie;

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

uno25 3.6

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

uno25 3.6

cerr

El siguiente programa tiene un error:

#incluir
utilizando espacio de nombreshoras;

En tprincipal()
{
en myInt;

regreso 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 debe llamarse temp, entonces el siguiente comando g ++ enviará el mensaje de error del compilador al archivo, error.txt:

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

Si el archivo error.txt no existe, se creará. 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 se omite 2> error.txt 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 << '¡El mensaje de error!' << ' orte';

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:

carbonizarseTXT[50];
costo<<'Ingrese texto y presione Enter:'TXT;
obstruir<<TXT<<endl;

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
utilizando espacio de nombreshoras;

En tprincipal()
{
freopen( 'log.txt','en',stdout);

costo << 'texto de entrada' <<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á. 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:

carbonizarsech;
costo << 'Texto de entrada:' <<endl;
Ginebra.obtener(ch);
costo <<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:

costo << 'Texto de entrada:' <<endl;
costo << Ginebra.obtener() <<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:

carbonizarsepag[10];
costo << 'Texto de entrada:' <<endl;
Ginebra.obtener(str,10);
costo <<pag<<endl;

Si la entrada es 'grandes personas', entonces 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 al menos 10, y el argumento get () debe ser 11. Si se desea toda la línea de entrada, entonces el número de almacenamiento de la cadena debe ser al menos el número de caracteres escritos, más 1. Por lo tanto, 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 excelente, entonces se extraería excelente:

carbonizarsepag[30];
costo << 'Texto de entrada:' <<endl;
Ginebra.obtener(str,6,'o');
costo <<pag<<endl;

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

Si el texto de entrada para el siguiente código es una gran gente, entonces se extraerá gr:

carbonizarsepag[30];
costo << 'Texto de entrada:' <<endl;
Ginebra.obtener(str,10,'Y');
costo <<pag<<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:

costo << 'Texto de entrada:' <<endl;
tiempo (1) {
carbonizarsech= (carbonizarse)Ginebra.obtener();
costo <<ch;
si (ch== ' orte')
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:

costo << 'Texto de entrada:' <<endl;
tiempo (1) {
carbonizarsech= (carbonizarse)Ginebra.ojeada();
costo <<ch;
Ginebra.obtener();
si (ch== ' orte')
rotura;
}

Si get () no eliminó los siguientes caracteres, peek () solo leería el primer carácter y el bucle se repetirá indefinidamente.

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

Observe 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. Entonces, 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 ‘ ’ 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 el 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
utilizando espacio de nombreshoras;

En tprincipal()
{
En teso= 5;
flotadorpie= 63.5;
costo << 'Los ' <<eso<< 'los artículos cuestan $' <<pie<< ' NOSOTROS.' <<endl;

regreso 0;
}

La salida es:

los5los artículos cuestan $63.5NOSOTROS.

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

#incluir
utilizando espacio de nombreshoras;

estructuraS t{
carbonizarsepag[11] = 'algunas palabras';
}obj;

En tprincipal()
{
costo <<obj.pag << ' orte';

regreso 0;
}

El resultado son '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:

En tprincipal(En targc,carbonizarse *argv[argc])
{

regreso 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ículos3pluma de libro'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. La casa grande está entre comillas porque es una frase. El comando de terminal para ejecutar este programa sería:

./artículos temporales3pluma 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 para el 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 de 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 que el usuario ingresó. 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
utilizando espacio de nombreshoras;

En tprincipal(En targc,carbonizarse**argv)
{

costo <<argv[0] << ', ' <<argv[1] << ', ' <<argv[2] << ', ' <<argv[3] << ', ' <<argv[4] << ', ' <<argv[5] <<endl;

regreso 0;
}

Tenga en cuenta aquí que la matriz 'char * argv [argc]', se ha declarado como 'char ** argv'.

Si este programa se ejecuta con el comando de terminal,

./artículos temporales3pluma de libro'casa Grande'

entonces la salida sería:

./temp, artículos,3libro, 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 durante la ejecución del programa (llamada del programa), no se ha enviado el valor de argc.

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.