C ++: fluxo de E / S padrão

Objetos de E / S padrão: cin, cout, cerr, clog

  • cout; // O objeto de fluxo global envia dados para o display
  • cin; // cerr não tem buffer, clog tem buffer
  • cerr; // Dados de saída de erro padrão para o display
  • clog; // Dados de saída de registro padrão para o display

Um, fluxo de entrada padrão

cin.get ()

// Apenas um caractere pode ser lido por vez

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

// Leia um personagem

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

// Pode ler strings

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

Às vezes, você só quer pegar uma parte do buffer e descartar a outra parte. É assim que você pode usar cin.ignore (). O método de uso é:

cin.ignore (int IntExp, char chExp);

Entre eles, intExp é uma expressão inteira ou um valor inteiro.Este valor representa o número máximo de caracteres ignorados em uma linha, por exemplo, intExp = 100; há também um parâmetro chExp, que é uma expressão de caractere. Indica que se um valor de caractere igual a chEXP for encontrado, ignore () será interrompido. Se um caractere com valor igual a chEXP não for encontrado após ignorar 100 caracteres, ignore () deve ser interrompido, então 100 é o 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 função retorna o próximo caractere no fluxo de entrada, mas não remove o caractere do fluxo de entrada equivalente para apenas dar uma olhada no próximo caractere, por isso é chamado de peek.

cin.peek () não pulará espaços e retornos de carro no fluxo de entrada. No caso em que o fluxo de entrada terminou, cin.peek () retorna EOF.

Quando o formato dos dados de entrada é diferente e o formato precisa ser pré-julgado antes de decidir como inserir, peek () pode desempenhar um 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 é uma classe com seu próprio buffer. Cada vez que você cin >> a, ele reduz o buffer em um e o coloca em a. Cin.putback (a) coloca o conteúdo de a de volta no buffer.

	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
*/

Em segundo lugar, o fluxo de saída padrão

cout.flush ()

O conteúdo a ser produzido será armazenado primeiro no buffer, e a função de cout.flush () é esvaziar à força os dados no buffer. Dessa forma, os dados não serão perdidos quando o fluxo de leitura e gravação for fechado.

cout.put ()

cout.put () é dedicado a adicionar um único caractere ao buffer de fluxo de saída,

cout.write ()

O método do membro write () é dedicado a adicionar a string especificada ao buffer de fluxo de saída e os iniciantes podem simplesmente entendê-lo como a saída da string especificada. O formato da sintaxe é o seguinte:

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

Entre eles, s é usado para especificar uma matriz de caracteres ou string com um comprimento de pelo menos n; n significa os primeiros n caracteres a serem produzidos.

	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 ()
  • O caractere de controle int width () será usado para ajustar a largura do campo. Como a largura é uma função de membro, ela deve ser chamada pelo objeto. Por exemplo, cout.width () exibirá a largura do campo atual, o padrão é 0, e cout.width (3) definirá a largura do campo como 3. Observe que a maneira como o C ++ acomoda os campos é atribuir apenas a largura certa ao campo para acomodar o campo, portanto, a largura do campo padrão em C ++ é 0 para caber todos os campos.
  • O alinhamento padrão da largura é o alinhamento à direita, ou seja, se o campo não for tão largo em cout.width (12), um espaço será preenchido no lado esquerdo do campo para atingir a largura de 12 campos.
  • Observe também que a largura afeta apenas a próxima saída após ser configurada. Após a saída do próximo campo, os campos subsequentes são restaurados para o valor padrão, como cout.width (12); cout << 2 << 3; em seguida, saída At 2 será exibido com uma largura de 12 campos, mas em 3 será exibido por padrão.
  • Largura int () retornará o valor da última largura do campo quando for chamada.
cout.fill ()

A função de membro fill () pode ser usada para alterar os caracteres preenchidos, como cout.fill ('*'), use * para preencher a parte em branco.

Mas tenha cuidado: a função de preenchimento sempre terá efeito após ser definida, a menos que seja redefinida.

E cout.fill ('*') retornará o caractere de preenchimento antes de definir '*' '', então se você usar cout << cout.fill ('*'), este espaço será gerado

cout.setf (marcador)

A função de cout.setf () é controlar o formulário de saída configurando o sinalizador de formato

  • 1. Use o símbolo de controle para controlar o formato de saída
    . A função do símbolo de controle é
    dec para definir a base de um inteiro em 10
    hex para definir a base de um inteiro em 16
    oct para definir a base de um inteiro em 8
    setbase (n) para definir a base de um inteiro para n (n só pode ser 16, 10 , Um de 8)
    setfill © Defina o caractere de preenchimento c, c pode ser uma constante de caractere ou uma variável de caractere
    setprecision (n) Defina a precisão de um número real para n dígitos. Ao emitir como um número decimal decimal geral, n representa um número válido. Em formas fixas (ao emitir em casas decimais fixas) e científicas (exponencial), n é o número de casas decimais
    . n) define a largura do campo para n
    locais. setiosflags (ios :: fixed) define números de ponto flutuante a serem exibidos com casas decimais fixas.
    setiosflags (ios :: científico) Define o número de ponto flutuante a ser exibido em notação científica (que é, forma exponencial).
    setiosflags (ios :: left) Os dados de saída são alinhados à esquerda.
    setiosflags (ios :: right) Os dados de saída são alinhados à direita.
    setiosflags (ios :: shipws) Ignora os espaços à esquerda.
    setiosflags (ios :: maiúsculas) Ao emitir E em notação científica e a letra X em hexadecimal, é expresso em maiúsculas.
    setiosflags (ios :: showpos) Ao emitir um número positivo, ele dá o sinal "+".
    resetiosflags termina o estado do formato de saída que foi definido, e o conteúdo deve ser especificado entre colchetes.
  • 2. Use o membro do objeto stream para controlar o formato de saída. A
    função membro stream tem a mesma função que o símbolo de controle.
    Precision (n) setprecision (n) define a precisão do número real em n bits.
    Largura (n ) setw (n) define a largura do campo para a posição n.
    preencher o conjunto de caracteres de preenchimento © setfill C.
    setf () setiosflags () formato o estado de saída deve ser dado no formato de estado de parênteses, o mesmo conteúdo de caracteres de controle entre parênteses setiosflags content.
    ubsetf () resetiosflags () para encerrar o status do formato de saída definido.
    cout.width (10);
    cout.setf (ios :: hex);
  • 3. Defina o sinalizador de formato do status de formato.
    Função do sinalizador de formato
    ios :: left Os dados de saída são alinhados à esquerda dentro da ampla gama deste campo
    ios :: right Os dados de saída são alinhados à direita dentro da ampla gama deste campo
    ios: : internal O bit de sinal do valor está na ampla faixa deste campo O interno alinhado à esquerda, o valor é alinhado à direita e o meio é preenchido com caracteres de preenchimento.
    ios :: dec Define a base do inteiro como 10
    ios :: oct Define a base do inteiro para 8
    ios :: hex Define a base do inteiro para 16
    ios :: showbase Força a saída de um inteiro A base (sistema octal começa com 0, sistema hexadecimal começa com 0x)
    ios :: showpoint força a saída do número de ponto flutuante e da mantissa 0
    ios :: maiúscula ao enviar E em notação científica e a letra X em hexadecimal, Em maiúscula,
    ios :: showpos fornecerá um sinal "+" ao emitir um positivo número.
    ios :: científico Defina o número de ponto flutuante para exibir em notação científica (ou seja, forma exponencial)
    ios :: fixed Defina o número de ponto flutuante para um número fixo de casas decimais Exibir
    ios :: unitbuf atualiza todos os fluxos após cada saída
    ios: : stdio clear stdout, stderr após cada saída
	//成员方法的方式
	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*******
*/

Acho que você gosta

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