C ++: flujo de E / S estándar

Objetos de E / S estándar: cin, cout, cerr, clog

  • cout; // El objeto de flujo global envía datos a la pantalla
  • cin; // cerr no tiene búfer, clog tiene búfer
  • cerr; // Datos de salida de error estándar a la pantalla
  • clog; // Datos de salida de registro estándar a la pantalla

Un flujo de entrada estándar

cin.get ()

// Solo se puede leer un carácter a la vez

	char ch;
	while ((ch = cin.get()) != EOF){
    
    //EOF就是键盘Ctrl+z,常被作为结束的标志
		cout << ch << endl;
	}
/*
结果:
cin
c
i
n
*/
cin.get (un parámetro)

// Leer un personaje

	char ch2;
	cin.get(ch2); //读取一个字符
	cout << ch2 << endl;
/*
结果:
cin
c
*/
cin.get (tres parámetros)

// Puede leer cadenas

	char buf[256] = {
    
     0 };
	cin.get(buf, 256); //从缓冲区读一个字符串
	cout << buf;
/*
结果:
输入:cin.get()  111
输出:cin.get()  111
*/
cin.getline ()
	char buf[256] = {
    
     0 };
	cin.getline(buf, 256); //读取一行数据
	cout << buf;
/*
输入:cin.getline() cin.get()
输出:cin.getline() cin.get()
*/
cin.ignore ()

A veces solo desea tomar una parte del búfer y descartar la otra parte. Así es como puede usar cin.ignore (). El método de uso es:

cin.ignore (int intExp, char chExp);

Entre ellos, intExp es una expresión entera o un valor entero, este valor representa el número máximo de caracteres ignorados en una línea, por ejemplo, intExp = 100, también hay un parámetro chExp, que es una expresión de carácter. Indica que si se encuentra un valor de carácter igual a chEXP, ignore () se detiene. Si no se encuentra un carácter con un valor igual a chEXP después de ignorar 100 caracteres, entonces ignore () debe detenerse, por lo que 100 es el valor máximo ignorado por ignore () Número de caracteres.

	char ch;
	cin.get(ch); //从缓冲区要数据 阻塞
	cout << ch << endl;
	cin.ignore(10); //忽略当前字符 从缓冲区取走了
	cin.get(ch);
	cout << ch << endl;
/*
结果:
输入:asdfghjklzxcvbnm
输出:a
	 c
*/
cin.peek ()

Esta función devuelve el siguiente carácter en la secuencia de entrada, pero no elimina el carácter de la secuencia de entrada, lo que equivale a echar un vistazo al siguiente carácter, por lo que se llama peek.

cin.peek () no saltará espacios ni retornos de carro en el flujo de entrada. En el caso de que el flujo de entrada haya terminado, cin.peek () devuelve EOF.

Cuando el formato de los datos de entrada es diferente y es necesario prejuzgar el formato antes de decidir cómo ingresar, peek () puede jugar un papel.

cout << "请输入数组或者字符串:" << endl;
char ch;
ch = cin.peek(); //偷窥一下缓冲区,返回第一个字符
if (ch >= '0' && ch <= '9') {
    
    

	int number;
	cin >> number;
	cout << "您输入的是数字:" << number << endl;

}
else {
    
    
	char buf[256] = {
    
     0 };
	cin >> buf;
	cout << "您输入的是字符串:" << buf << endl;
}
/*
结果:
	请输入数组或者字符串:
	acdsf
	您输入的是字符串:acdsf
*/
cin.putback ()

Iostream es una clase con su propio búfer. Cada vez que cin >> a, reduce el búfer en uno y lo coloca en a. Cin.putback (a) coloca el contenido de un respaldo en el búfer.

	cout << "请输入字符串或者数字:" << endl;
	char ch;
	cin.get(ch); //从缓冲区取走一个字符
	if (ch >= '0' && ch <= '9') {
    
    
		//ch放回到缓冲区
		cin.putback(ch);
		int number;
		cin >> number;
		cout << "您输入的是数字:" << number << endl;
	}
	else {
    
    
		cin.putback(ch);
		char buf[256] = {
    
     0 };
		cin >> buf;
		cout << buf << endl;
	}
/*
结果:
请输入字符串或者数字:
33333
您输入的是数字:33333
*/

En segundo lugar, el flujo de salida estándar

cout.flush ()

El contenido que se va a generar se almacenará primero en el búfer, y la función de cout.flush () es vaciar a la fuerza los datos en el búfer. De esta forma, los datos no se perderán cuando se cierre el flujo de lectura y escritura.

cout.put ()

cout.put () se dedica a agregar un solo carácter al búfer de flujo de salida,

cout.write ()

El método del miembro write () está dedicado a agregar la cadena especificada al búfer de flujo de salida, y los principiantes pueden simplemente entenderlo como la salida de la cadena especificada. El formato de sintaxis es el siguiente:

ostream & write (const char * s, streamsize n);

Entre ellos, s se usa para especificar una matriz de caracteres o cadena con una longitud de al menos n; n significa los primeros n caracteres que se emitirán.

	cout << "hello world" <<endl;
	//cout.flush();
	cout.put('h').put('e').put('l') << endl;
	cout.write("hello Zhaosi!", strlen("hello Zhaosi!"));
/*
结果:
hello world
hel
hello Zhaosi!
*/
cout.width ()
  • El carácter de control int width () se usará para ajustar el ancho del campo. Debido a que el ancho es una función miembro, debe ser llamado por el objeto. Por ejemplo, cout.width () mostrará el ancho del campo actual, el valor predeterminado es 0 y cout.width (3) Establecerá el ancho del campo en 3. Tenga en cuenta que la forma en que C ++ acomoda los campos es asignar solo el ancho correcto al campo para acomodar el campo, por lo que el ancho de campo predeterminado en C ++ es 0 para adaptarse a todos los campos.
  • La alineación predeterminada del ancho es la alineación a la derecha, es decir, si el campo no es tan ancho en cout.width (12), se rellenará un espacio en el lado izquierdo del campo para lograr el ancho de 12 campos.
  • También tenga en cuenta que el ancho solo afecta a la siguiente salida después de que se establece. Después de que se genera el siguiente campo, los campos siguientes se restauran al valor predeterminado, como cout.width (12); cout << 2 << 3; luego la salida At 2 se mostrará con un ancho de 12 campos, pero en 3 se mostrará por defecto.
  • Int width () devolverá el valor del último ancho de campo cuando sea llamado.
cout.fill ()

La función miembro fill () se puede utilizar para cambiar los caracteres rellenos, como cout.fill ('*'), utilice * para rellenar la parte en blanco.

Pero tenga cuidado: la función de relleno siempre será efectiva después de que se configure, a menos que se reinicie.

Y cout.fill ('*') devolverá el carácter de relleno antes de configurar '*' '', por lo que si usa cout << cout.fill ('*'), este espacio se generará

cout.setf (marcador)

La función de cout.setf () es controlar el formulario de salida estableciendo el indicador de formato

  • 1. Utilice el símbolo de control para controlar el formato de salida
    . La función del símbolo de control es
    dec para establecer la base de un entero en 10
    hex para establecer la base de un entero en 16
    oct para establecer la base de un entero en 8
    setbase (n) para establecer la base de un número entero an (n solo puede ser 16, 10 , Uno de 8)
    setfill © Establece el carácter de relleno c, c puede ser una constante de carácter o una variable de carácter
    setprecision (n) Establece la precisión de un número real an dígitos. Cuando se genera como un número decimal decimal general, n representa un número válido. En forma fija (cuando se genera en lugares decimales fijos) y científica (exponencial), n es el número de lugares decimales
    . n) establece el ancho del campo en n lugares
    setiosflags (ios :: fijo) establece números de punto flotante que se mostrarán con decimales fijos
    setiosflags (ios :: científico) Establece el número de punto flotante que se mostrará en notación científica (que es, forma exponencial).
    setiosflags (ios :: left) Los datos de salida están alineados a la izquierda.
    setiosflags (ios :: right) Los datos de salida están alineados a la derecha.
    setiosflags (ios :: shipws) Ignora los espacios
    iniciales . setiosflags (ios :: mayúsculas) Cuando se genera E en notación científica y la letra X en hexadecimal, se expresa en mayúsculas.
    setiosflags (ios :: showpos) Cuando se genera un número positivo, se muestra el signo "+".
    resetiosflags termina el estado del formato de salida que se ha set, y el contenido debe especificarse entre corchetes.
  • 2. Utilice el miembro del objeto de flujo para controlar el formato de salida. La
    función del miembro de flujo tiene la misma función que el símbolo de control.
    Precision (n) setprecision (n) establece la precisión del número real en n bits.
    Width (n ) setw (n) establece el ancho del campo en la posición n.
    rellena el conjunto de caracteres de relleno © © setfill C.
    formato setf () setiosflags () el estado de salida se debe dar entre paréntesis formato de estado, el mismo contenido de los caracteres de control entre paréntesis setiosflags content.
    ubsetf () resetiosflags () para terminar el estado del formato de salida establecido
    cout.width (10);
    cout.setf (ios :: hex);
  • 3. Establezca el indicador de formato del estado del formato.
    Función de indicador de formato
    ios :: left Los datos de salida están alineados a la izquierda dentro del rango amplio de este campo
    ios :: right Los datos de salida están alineados a la derecha dentro del rango amplio de este campo
    ios: : interno El bit de signo del valor está en el rango amplio de este campo El interior está alineado a la izquierda, el valor está alineado a la derecha y el medio está lleno de caracteres de relleno.
    ios :: dec Establece la base del entero en 10
    ios :: oct Establece la base del entero en 8
    ios :: hex Establece la base del entero en 16
    ios :: showbase Fuerza la salida de un entero La base (el sistema octal comienza con 0, el sistema hexadecimal comienza con 0x)
    ios :: showpoint fuerza la salida del número de punto flotante y la mantisa 0
    ios :: mayúsculas al generar E en notación científica y la letra X en hexadecimal, en mayúsculas,
    ios :: showpos dará un signo "+" al generar un resultado positivo número.
    ios :: científico Establece el número de punto flotante para que se muestre en notación científica (es decir, forma exponencial)
    ios :: fijo Establece el número de punto flotante en un número fijo de lugares decimales Mostrar
    ios :: unitbuf actualiza todos los flujos después de cada salida
    ios: : stdio clear stdout, stderr después de cada salida
	//成员方法的方式
	int number = 10;
	cout << number << endl;
	cout.unsetf(ios::dec); //卸载当前默认的的10进制输出方式
	cout.setf(ios::oct); //八进制输出
	cout.setf(ios::showbase);
	cout << number << endl;
	cout.unsetf(ios::oct); //卸载8进制
	cout.setf(ios::hex);
	cout << number << endl;

	cout.width(10);
	cout.fill('*');
	cout.setf(ios::left);
	cout << number << endl;


	//通过控制符
	int number2 = 10;
	cout << hex
		<< setiosflags(ios::showbase)
		<< setw(10)
		<< setfill('*')
		<< setiosflags(ios::left)
		<< number2
		<< endl;
/*
结果:
10
012
0xa
0xa*******
0xa*******
*/

Supongo que te gusta

Origin blog.csdn.net/weixin_45341339/article/details/112970465
Recomendado
Clasificación