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

Administrar la consola con las clases de iOStream en C ++
En la computación, la consola es el teclado de la computadora y el monitor de la computadora. En el pasado, la salida se envió directamente a la pantalla del monitor y no a una ventana que se muestra en el monitor. Para el usuario de la computadora ordinaria, las aplicaciones de hoy no usan el monitor explícitamente. Estas aplicaciones usan Windows que se muestran en el monitor. Sin embargo, el programador de computadoras aún necesita usar la pantalla del monitor. Aunque el programador aún 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 de Windows, esta ventana se llama el 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 el terminal. Este artículo explica cómo leer caracteres y cadenas del teclado y enviar caracteres y cadenas a la terminal (o símbolo del sistema). Cada programador de C ++ necesita saber en este artículo.

Para tener la entrada del teclado y la 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 cuerdas del teclado
  • Mostrar y eliminar caracteres antes de presionar Enter
  • Enviar personajes y cuerdas al monitor
  • Argumentos para 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 solo los usa sin instancias nuevamente.

cout

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

cout << "This is output.";

Cout es un objeto de salida 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 rediseñado aparece a la derecha de la frase de salida. No va a la siguiente línea. "Endl" al final de la siguiente declaración forzará lo que la pantalla imprima 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', todas las líneas de texto aún pueden no aparecer en la pantalla inmediatamente. "Endl" descarga la línea completa de texto a la pantalla.

Nota: Una cadena enviada a Cout está en cotizaciones dobles, mientras que un personaje enviado está en citas individuales. Se puede enviar una serie de cuerdas y chars 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.

cinta

CIN es el objeto de entrada iostream estándar, 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 instruye al usuario que escriba una palabra en la línea de pantalla siguiente y presione la tecla ENTER. Tenga en cuenta el uso de "Endl" que obliga al usuario a ingresar texto en la siguiente línea de la pantalla. Como el texto del usuario tipos, el texto ingresado se hace eco de la pantalla mientras entra en el objeto CIN. Después de presionar ENTER, se ejecuta la tercera declaració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, separado por espacios. Estas palabras deberán extraerse en diferentes variables. El siguiente segmento de código ilustra esto:

char txt [20];
int;
flotante 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 por el 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;
regresar 0;

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

G ++ -O Temp Temper.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 ++, luego el mensaje de error del compilador se enviaría al destino de error estándar, que sigue siendo la pantalla (monitor).

El objeto de transmisión que representa el destino de salida estándar es cout. El objeto de transmisión 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 está registrando. El destino de registro estándar es la pantalla. El objeto de transmisión de registro estándar es una obstrucción. El siguiente código volverá a mostrar el texto de entrada a 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 aparecer "Input_text" en la pantalla.

En la práctica, el registro generalmente se redirige a un archivo. El siguiente programa ilustra esto:

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

Freopen ("Registro.txt "," w ", stdout);
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 la salida estándar. La segunda declaració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 cuerdas del teclado

Mientras el usuario está escribiendo la 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 Intro, todos los caracteres están en el búfer; Además, el cursor va al comienzo de la siguiente línea a continuación, en la pantalla. El programa continúa a la siguiente declaración del programa, después de la declaración de lectura de entrada.

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

Leyendo el primer personaje

Get (char_type & c):
El siguiente segmento de código muestra cómo leer el primer carácter, desde el búfer de transmisión de entrada:

Char Ch;
cout << "Input text:" << endl;
cinta.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 a un personaje. Cuando el usuario escribe el personaje y presiona la tecla Intro, la tercera instrucción copia el carácter del búfer de flujo de entrada en la variable, CH.

Incluso si el usuario escribiera más de un personaje, el primer carácter sería tomado por el segmento de código.

conseguir():
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", entonces se devolvería 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 que comienzan desde el primero. Se puede usar el siguiente código:

char str [10];
cout << "Input text:" << endl;
cinta.Get (Str, 10);
cout << str << endl;

Si la entrada es "Great People", entonces la salida será "gran PEO", de 9 caracteres y no 10. El carácter de cadena nul (\ 0) toma la décima posición en el argumento Get. Entonces, para tener 9 caracteres en STR, su tamaño de almacenamiento debe tener 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 cadenas debe ser al menos el número de caracteres escrito, 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 cadena (str) y 13 para el argumento get (). Tenga en cuenta que un espacio se cuenta como un personaje.

get (char_type* s, streamsize n, char_type delimitaciones)
Es posible extraer una subtracción, delimitada a la derecha, por la primera ocurrencia de un personaje en particular, o por el tamaño de la corriente de la subtracción, que siempre viene primero. Si el texto de entrada al siguiente código es "excelentes personas", entonces se extraería "excelente":

char str [30];
cout << "Input text:" << endl;
cinta.Get (Str, 6, 'O');
cout << str << endl;

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

Si el texto de entrada al siguiente código es "Great People", entonces se extraería "GR":

char str [30];
cout << "Input text:" << endl;
cinta.Get (Str, 10, 'E');
cout << str << endl;

La primera ocurrencia de 'E', viene primero antes de la décima posición.

Obtener a todos los personajes 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;
mientras (1)
char ch = (char) cin.conseguir();
cout << ch;
if (ch == '\ n')
romper;

El casting con (char), convierte cada número decimal en el carácter ASCII correspondiente.

ojeada()

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

cout << "Input text:" << endl;
mientras (1)
char ch = (char) cin.ojeada();
cout << ch;
cinta.conseguir();
if (ch == '\ n')
romper;

Si los siguientes caracteres no fueran eliminados por get (), Peek () solo estaría leyendo el primer personaje, y el bucle iterará indefinidamente.

Mostrar y eliminar caracteres antes de presionar Enter

Observe que con el objeto CIN, la tecla ENTER debe presionarse 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 tarde.

Enviar personajes y cuerdas al monitor

El objeto Cout es un objeto de transmisión de salida, ya instanciado y presente en la biblioteca estándar 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 resultan en escalares pueden ser argumentos para el operador de inserción. El operador convierte el escalar en texto y coloca el texto en la transmisión del objeto Cout. Cuando se envía texto al objeto Cout, normalmente aparece en la pantalla (monitor). Sin embargo, ocasionalmente, puede no aparecer de inmediato. Para el texto forzado en la pantalla, inserte el valor especial, "Endl", justo después de insertar el texto. Esto hará que el texto se descarte a la pantalla, y se agregará una nueva línea. NOTA: '\ n' simplemente agrega una nueva línea pero no descarga texto a la pantalla.

El siguiente programa muestra cómo imprimir los valores de INT, Float y Text Ordinary, en la pantalla:

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

int it = 5;
flotante ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
regresar 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 de una clase:

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

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

La salida es "algunas palabras".

Argumentos para 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])

regresar 0;

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

Artículos 3 Libro Pen "Big House"

Hay 5 argumentos aquí: "artículos", "3", "libro", "pluma" y "gran casa"

Cada uno es texto. Un argumento numerado a un programa es texto. En otras palabras, cada argumento es una cadena. "Big House" está en citas porque es una frase. El comando terminal para ejecutar este programa sería:

./Temperales 3 Libro Pen "Big House"

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 principal (), Argc es el número de argumentos para el programa, más 1. En este caso, hay 5 argumentos para el programa. Entonces, Argc tiene 6. En la sintaxis, Argv [argc] es una variedad de punteros a las cuerdas. El primer valor para esta matriz en Argv [0] viene dado por el compilador. Es un puntero al nombre del archivo del programa. El resto de los valores son punteros para 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;
regresar 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 terminal,

./Temperales 3 Libro Pen "Big House"

Entonces la salida sería:

./temperatura, artículos, 3, libro, pluma, 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 para 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 se ejecuta un programa, la entrada al programa es diferente de cuándo el programa comenzará a ejecutar. Cuando un programa comienza a ejecutarse, la entrada al programa se une al comando para ejecutar el programa, separado por espacios.