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