Formatação com i fluxo o manipuladores /
Uma das dificuldades com C ++ em mover-se para transmitir objetos para a saída é aprender a formatar a saída. Na verdade, existem duas maneiras de formatar-stream E / S.
Conteúdo
- Video: formatação completa do pc e fazer espelhamento de s.o - tecratão
- O que é um / o manipulador i?
- Video: excel - fluxo de caixa simples e formatação básica
- Video: configurar bios do not da hp e asus para formatar com pen drive ou dvd
- O que i / manipuladores o que c ++ oferecer?
- Video: pra que formatar o pc? conheça técnicas que resolvem o problema
Video: Formatação Completa do PC e fazer Espelhamento de S.O - TecRatão
A primeira técnica que os programadores normalmente aprender é através de chamadas de métodos diretos. Por exemplo, a seguinte chamada define o fluxo de saída no modo hexadecimal para que números inteiros aparecem na tela como valores hexadecimais em vez de valores como decimais:
ios :: fmtflags prev = cout.setf (ios :: hex, ios :: basefield) -
Aqui o setf () método define os sinalizadores de formato pelo primeiro mascarando fora os bits no segundo argumento e, em seguida, definindo os bits indicados pelo primeiro argumento. A função retorna o valor antigo para que a função de chamada pode restaurar as bandeiras de formato antes de retornar.
Na prática, essa função aparece da seguinte forma:
#incluirusing namespace std - // displayHex - exibir um número em hexadecimal formatvoid displayHex (ostream& para fora, int n) {ios :: fmtflags prev = out.setf (ios :: hex, ios :: basefield) -out lt; lt; n-out.setf (ant) -} int main () {int n = 0x1234-cout lt; lt; "n = " lt; lt; n lt; lt; endl-cout lt; lt; "n é em hexadecimal "-displayHex (cout, n) -cout lt; lt; endl-retorno 0-}
O programa começa definindo a variável n para um valor hexadecimal. Em seguida, exibe o valor para cout. Em seguida, chama a displayHex () função para exibir o valor em formato hexadecimal. A saída do programa aparece da seguinte forma:
n = 4660n em hexadecimal é 1234
O valor em formato decimal não é reconhecível, mas a exibição hexadecimal é claramente o valor usado para inicializar n.
No entanto, C ++ fornece um segundo modo para controlar I / O formato: Os manipuladores de I / O.
O que é um / O manipulador I?
A I / O manipulador É um objecto que o programador pode ser inserida no fluxo de saída para invocar as funções de controlo de formato. O seguinte trecho de código demonstra o usuário de manipuladores de E / S. Ele executa a mesma função que o fragmento antes, excepto esta versão utiliza um manipulador de I / O para invocar o setf () função:
Video: Excel - Fluxo de caixa simples e formatação básica
#incluir#incluir usando espaço de nomes std-int main () {int n = 0x1234-cout lt; lt; "n = " lt; lt; n lt; lt; endllt; lt; "n é em hexadecimal " lt; lt; setbase (16) lt; lt; n lt; lt; endl-retorno 0-}
Aqui a Principal() primeiro saídas n como um valor decimal. Em seguida, ele usa o setbase (16) manipulador para alterar a base de exibição de decimal (base 10) para hexadecimal (base 16) antes de exibir o valor de novo. A saída a partir desta versão é indistinguível da versão anterior:
n = 4660n em hexadecimal é 1234
o setbase (16) objeto aparece apenas como uma chamada para uma função no meio do fluxo de saída. O fato de que um objeto está sendo criado é invisível para o usuário.
Video: Configurar bios do Not da HP e ASUS para formatar com pen drive ou DVD
Para hexadecimal, octal e decimal, C ++ fornece os atalhos feitiço, outubro e dezembro o que significa que o código poderia assumir a seguinte forma ainda mais curto:
cout lt; lt; "n = " lt; lt; n lt; lt; endllt; lt; "n é em hexadecimal " lt; lt; feitiço lt; lt; n lt; lt; endl-
O que I / manipuladores O que C ++ oferecer?
Ter um olhar para esta tabela, que contém uma lista de E / S manipuladores disponíveis para C ++ 2011.
I / O Manipulador | Função |
---|---|
boolalpha noboolalpha | Alterna entre textual e display numérico de um booleano. Quando boolalpha é definido, o verdadeiro eo falso aparecem na tela como ‘verdade‘ e ‘falso‘. Quando não está definido, eles aparecem como ‘1‘ e ‘0’. |
showbase noshowbase | Quando showbase é definido, os valores octal são precedidos por um 0 e hexadecimal Os valores são precedidos pela ‘0x‘ ou ‘0X‘. |
showpoint noshowpoint | Um ponto decimal é sempre exibido quando showpoint está definido. |
showpos noshowpos | exibe uma ‘+‘ assinar na frente de valores positivos quando showpos está definido. Exibe nada quando noshowpos é conjunto. |
skipws noskipws | Ignora líder espaço em branco na entrada. |
maiúscula nouppercase | E se maiúscula é definida, em seguida, usar maiúsculas para formatos de saída, por exemplo, ‘0X‘ para saída hexadecimal. E se nouppercase é definido, utilização minúsculas, por exemplo, ‘0x‘ para saída hexadecimal. |
unitbuf nounitbuf | Se estiver definido, então a saída não é tamponada mas lavada após cada inserir. Se não for definido, a saída é tamponada. |
fixo científico | Definir a saída de valores de ponto flutuante, quer fixo ou notação científica. |
ws | Este objeto come espaço em branco a partir de um fluxo de entrada. |
extremidades | Insere um caractere nulo (‘‘) Em uma produção corrente. Útil para nulo de terminação uma corda ao usar ostrstream. |
rubor | Esvazia os caracteres do buffer para o fluxo de saída. |
endl | Insere um caractere de nova linha. |
setiosflags(N) resetiosflags(N) | Definir ou limpar o ios bandeiras en masse. |
setbase (n) | Define a base para a entrada e saída de número inteiro de 8, 10, 16 ou 0. Veja o texto para explicação de 0. |
dezembro outubro feitiço | Definir a base para decimal, octal ou hexadecimal. abreviada para setbase (10), setbase (8), e setbase (16), respectivamente. |
setfill (c) | Define o caractere usado para preencher o espaço quando o número de caracteres para mostrar é menor do que a largura do campo. O padrão personagem é um espaço. |
setprecision (n) | Define o número de dígitos para a saída ao exibir um número de ponto flutuante. |
setw (n) | Define a largura mínima do campo de saída seguinte. O campo é expandida com setfill () personagens como necessário. |
setfill (c) | Define o caractere usado para preencher o espaço quando o número de caracteres para mostrar é menor do que a largura do campo. O padrão personagem é um espaço. |
interno esquerda certo | Definir a colocação de caracteres de preenchimento. Se o caractere de preenchimento foram ‘*’ (por exemplo), em seguida: interno → “$ 123.00 **“esquerda → “** $ 123,00“certo → “$ 123,00 **“ |
get_money () put_money () | Ler ou exibir um valor monetário, usando as regras locais definidos por localidade. (Isto não é implementado na versão atual do GCC.) |
consiga tempo() put_time () | Leia ou exibir uma hora ou data, usando as regras locais como definido pelo localidade. (Isto não é implementado na versão atual do GCC.) |
A maioria dos manipuladores são simples. Alguns requerem alguma explicação, no entanto. Por exemplo, em relação ao setbase () manipulador, nem todos os valores de base são apoiadas. Na verdade, C ++ suporta apenas decimal, octal e hexadecimal I / O - que é ok, como isso é muito bonito tudo que é necessário. Você pode, no entanto, definir a base para 0 - na verdade, 0 é o valor padrão.
Definir a base para 0 é o mesmo que defini-lo para decimal para a saída. Para entrada, no entanto, definir a base para 0 significa “extrair a base do próprio número”. As regras para fazê-lo são os seguintes:
* Se um número começa com 0x ou 0X, presume-se ser hexadecimal.
* Se um número começa com apenas 0, então presume-se ser octal.
* Caso contrário, o número é assumido como sendo decimal.
O seguinte programa simples demonstra as seguintes regras:
#incluir#incluir usando espaço de nomes std-int main () {int n1, n2, n3-cin gt; gt; setbase (0) gt; gt; n1 gt; gt; n2 gt; gt; n3-cout lt; lt; showbase lt; lt; setbase (16) lt; lt; "n1 = " lt; lt; n1 lt; lt; ", = n2 " lt; lt; n2lt; lt; ", = n3 "lt; lt; n3 lt; lt; endl-retorno 0-}
A primeira linha define a base para a cin opor-se a 0 e, em seguida, extrai três números inteiros. A segunda linha mostra estes três inteiros em formato hexadecimal. o showbase manipulador faz com que o líder ‘0x‘ para ser exibida para valores hexadecimais. O seguinte mostra um exemplo de execução deste programa, onde os três números em negrito são os valores que a entrada do teclado:
10 010 0x10n1 = 0xa, n2 = 0x8, n3 = 0x10
Você pode ver que o primeiro número foi interpretado como 10 em base 10, que é 0xA em hexadecimal. O segundo número foi interpretado como 10 na base 8, o qual é 8 em hexadecimal. O terceiro e último número foi interpretado como 10 em hexadecimal.
Outro manipulador que merece menção especial é o setw (), abreviação de “width set”. Isso define a largura mínima de exibição do próximo campo exibido. O seguinte programa simples mostra como setw ()interage com estofamento e o caractere de preenchimento:
#incluir#incluir usando espaço de nomes std-int main () {int largura-int valor-cout lt; lt; "Introduza a largura:"CIN II-III gt; gt; largura-cout lt; lt; setfill ( `*`) - para (-) {cout lt; lt; "Insira um valor:"CIN II-III gt; gt; value-if (valor == 0) {break} cout lt; lt; "Esquerda, Direita e interno: n"lt; lt; esquerda lt; lt; setw (largura) lt; lt; valor lt; lt; ", "lt; lt; rightlt; lt; setw (largura) lt; lt; valor lt; lt; ", "lt; lt; interno lt; lt; setw (largura) lt; lt; valor lt; lt; endl-} return 0-}
Este programa define o caractere de preenchimento para ‘*‘ (O padrão é o espaço). Em seguida, ele lê a largura para ser usado para todos os números do teclado antes de entrar em um loop que lê e exibe valores. Dentro deste loop, o programa exibe primeiro o número com o esquerdo; preenchimento mão, depois com certa; preenchimento lado, e, finalmente, com preenchimento interno.
Video: Pra que Formatar o Pc? Conheça Técnicas Que Resolvem o Problema
O seguinte é um exemplo de execução do programa com a entrada em negrito:
Introduza a largura:5Insira um valor:100000Esquerda, Direita e interno: 100000, 100000, 100000Enter um valor:100Esquerda, Direita e interna: 100 ** ** 100, ** 100Enter um valor:-100Esquerda, Direita e interno: -100 *, * -100, - * 100Enter um valor:0
Aqui 5 é inserido como a largura do campo. No entanto, o primeiro valor inserido, 100.000, requer mais do que 5 colunas para exibir de modo nenhum dos campos de exibição teve qualquer efeito. A largura aparelho só define a largura mínima para exibir.
O próximo valor inserido, 100, requer apenas três colunas para exibir, para que o programa exibido o valor primeiro com dois * caracteres à direita, em seguida, à esquerda, e novamente à esquerda.
O próximo valor inserido, -100, demonstra a diferença entre encher direita e preenchimento interno. preenchimento direito colocar o caractere de preenchimento à esquerda do valor, incluindo o sinal de menos. preenchimento Interno colocar o caractere de preenchimento entre o valor eo sinal de menos. Isso também funciona para um sinal de mais, quando mais é forçado com o showpos manipulador e entre o número e o sinal monetário (quando a moeda é suportado pelo compilador).
Os manipuladores não adicionar qualquer capacidade que já não está presente. Afinal, cada um desses manipuladores acaba chamando um método público sobre o objeto de fluxo. No entanto, eles não fornecem um meio conveniente de formatação de I / O.