formatting i o printf
Este tutorial discute o uso e exemplos de funções como printf, sprintf, scanf que são usadas para formatar entrada / saída em C ++:
Em nossos tutoriais C ++ anteriores, vimos que podemos realizar operações de entrada-saída em C ++ usando cin / cout.
Além de usar essas construções, também podemos usar a biblioteca C. Usando a biblioteca de entrada e saída padrão C (cstdio, C ++ equivalente para o cabeçalho stdio.h em linguagem C), realizamos operações de I / O usando “fluxos” que operam com dispositivos físicos como teclados (entrada padrão), impressoras, terminais (saída padrão ) ou qualquer outro tipo de arquivo compatível com o sistema operacional.
=> Verifique os tutoriais detalhados de treinamento C ++ aqui.
Os fluxos nada mais são do que uma entidade abstrata usada para interagir com dispositivos físicos de maneira uniforme. Todos os fluxos têm características semelhantes e são independentes dos dispositivos de mídia física.
Em nossos próximos tópicos neste tutorial, aprenderemos em detalhes sobre algumas funções, ou seja, printf, sprint e scanf.
O que você aprenderá:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf vs. cin / cout em C ++
- perguntas frequentes
- Conclusão
C ++ printf
A função printf em C ++ é usada para gravar a saída formatada em stdout.
Protótipo de função:
int printf (formato const char *, ...);
Parâmetros:
formato => Um ponteiro para uma string terminada em null gravada no fluxo de arquivos. Ele consiste em caracteres junto com um especificador de formato opcional que começa com%. O especificador de formato é substituído por valores apropriados que seguem a string de formato.
… => Outros argumentos adicionais que especificam os dados a serem impressos na ordem em que o formato é especificado.
Valor de retorno:
qa vs qc em teste de software
Sucesso => printf retorna o número de caracteres retornados.
Falha => Valor negativo
Descrição:
A função printf é definida no cabeçalho. As funções printf escrevem a string apontada pelo ponteiro “format” para saída padrão stdout. A string de formato pode conter especificadores de formato que são então substituídos pelas variáveis passadas para a função printf como argumentos adicionais (após a string de formato).
Especificador de formato usado na função printf ()
Uma forma geral de especificador de formato é
%(flags)(width)(.precision)(length)specifier
A seguir está uma descrição de cada uma das partes do especificador de formato:
- % placa: Este é um sinal% principal
- Bandeiras: Eles podem ter os seguintes valores:
- -: Justifica à esquerda o resultado dentro do campo. Por padrão, justificado à direita.
- +: O sinal do resultado anexado ao início do valor incluindo resultados positivos.
- Espaço: na ausência de um sinal, o espaço é anexado ao início do resultado.
- #: Especifique uma forma alternativa de conversão.
- 0: usado para números inteiros e de ponto flutuante. Atuam como zeros à esquerda na ausência de espaço.
- Largura: Especifica a largura mínima do campo na forma de um * ou um valor inteiro. Isso é opcional.
- Precisão: Especifica a precisão com um ‘.’ Seguido por um * ou um número inteiro ou nada. Isso também é opcional.
- Comprimento: O argumento opcional que especifica o tamanho do argumento.
- Especificador: Este é um especificador de formato de conversão.
Vários especificadores de formato usados em C ++ são os seguintes:
Não | Especificador | Descrição |
---|---|---|
7 | você | Converte inteiro sem sinal em representação decimal. |
1 | % | Imprime um%. |
dois | c | Imprime um único caractere. |
3 | s | Imprime uma string. |
4 | d / i | Converte inteiro com sinal em representação decimal. |
5 | ou | Converte inteiro sem sinal em representação octal. |
6 | x / X | Converte um inteiro sem sinal em representação hexadecimal. |
8 | f / F | Converte número de ponto flutuante em representação decimal. |
9 | e / E | Converte o número de ponto flutuante em notação de expoente decimal. |
10 | a / A | Converte um número de ponto flutuante em um expoente hexadecimal. |
onze | g / G | Converte o número de ponto flutuante em notação decimal ou expoente decimal. |
12 | n | Número de caracteres escritos até agora por esta chamada de função. |
13 | p | Um ponteiro apontando para a sequência de caracteres definida pela implementação. |
Abaixo está um exemplo de programação C ++ completo que demonstra a função printf discutida acima.
Exemplo de C ++ printf
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }
Resultado:
O programa acima usa várias chamadas para a função printf e notamos que cada chamada para printf usa vários especificadores de formato que discutimos acima. O especificador de formato% .3f denota um valor flutuante com até 3 casas decimais. O resto das chamadas printf exibem os valores de caractere, decimal, octal e hexadecimal.
C ++ sprintf
A função Sprintf em C ++ é semelhante à função printf, exceto com uma diferença. Em vez de gravar a saída na saída padrão stdout, sprintf grava a saída em um buffer de string de caracteres.
Protótipo de função:
int sprintf (char * buffer, const char * format, ...)
Parâmetros:
buffer => Ponteiro para um buffer de string no qual o resultado deve ser escrito.
Formato => Ponteiro para uma string terminada em nulo que é gravada no fluxo de arquivos.
Nota: A string de formato usada na função sprintf é a mesma discutida como parte da descrição da função printf.
… => Outros argumentos adicionais que especificam os dados a serem impressos na ordem em que o formato é especificado.
Valor de retorno:
sucesso => Retorna o número de caracteres gravados no buffer suficientemente grande, excluindo o caractere nulo final.
Falha => Valor negativo é retornado.
Descrição:
A função Sprintf é definida no cabeçalho. A função sprintf é usada para escrever uma string apontada pelo formato para o buffer de string. O formato da string pode conter especificadores de formato começando com% que são substituídos pelos valores das variáveis que são passadas para a função sprintf () como argumentos adicionais.
Vejamos um programa C ++ de exemplo que mostra o uso da função sprintf.
Exemplo de sprintf
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }
Resultado:
No exemplo acima, primeiro, escrevemos uma string formatada em um buffer de caracteres mybuf usando a função sprintf. Em seguida, exibimos a string para stdout usando cout. Finalmente, exibimos o número de caracteres gravados no buffer mybuf.
C ++ scanf
A função scanf em C ++ lê os dados de entrada da entrada padrão stdin.
Protótipo de função:
int scanf (formato const char *, ...)
Parâmetros:
formato => Ponteiro para uma string terminada em nulo que define como ler a entrada. Esta string de formato consiste em especificadores de formato.
… => Argumentos adicionais recebendo entrada de dados. Esses argumentos adicionais estão em sequência de acordo com o especificador de formato.
Valor de retorno:
sucesso => Retorna um número de caracteres lidos.
matchingFailure => Retorna zero se ocorrer uma falha de correspondência antes que o primeiro argumento de recebimento seja atribuído.
Falha de entrada => Retorna EOF se ocorrer uma falha de entrada antes que o primeiro argumento de recebimento seja atribuído.
Descrição:
A função Scanf () é definida no cabeçalho. Esta função lê os dados de stdin e os armazena nas variáveis fornecidas.
Especificador de formato usado na função scanf ()
O formato geral da string de formato da função scanf () é:
%(*)(width)(length)specifier
Assim, o especificador de formato tem as seguintes partes:
- Caractere sem espaço em branco: Esses são os caracteres, exceto%, que consomem um caractere idêntico do fluxo de entrada.
- Caractere de espaço em branco: Todos os caracteres de espaço em branco consecutivos são considerados um caractere de espaço em branco. O mesmo vale para as sequências de escape.
- Especificação de conversão: Possui o seguinte formato:
- %: Caractere que especifica o início.
- *: Caractere de supressão de atribuição chamado. Se presente, o scanf não atribui o resultado a nenhum parâmetro de recebimento. Este parâmetro é opcional.
- Largura do campo: Parâmetro opcional (um número inteiro positivo) que especifica a largura máxima do campo.
- Comprimento: Especifica o tamanho do recebimento de um argumento.
O especificador de formato de conversão pode ser o seguinte:
Não | Especificador de formato | Descrição |
---|---|---|
7 | x / X | Corresponde a um inteiro hexadecimal sem sinal. |
1 | % | Corresponde a% literal. |
dois | c | Corresponde a um único caractere ou vários caracteres até a largura. |
3 | s | Corresponde à sequência de caracteres sem espaço em branco até a largura especificada ou o primeiro espaço em branco. |
4 | d | Corresponde a decimal. |
5 | eu | Corresponde a um inteiro. |
6 | ou | Corresponde a um inteiro octal sem sinal. |
8 | você | Corresponde a um inteiro decimal sem sinal. |
9 | a / A, e / E, f / F, g / G | Corresponde ao número de ponto flutuante. |
10 | (definir) | Corresponde a uma sequência não vazia de caracteres do conjunto fornecido. Se precedido por ^, os caracteres que não estão no conjunto são correspondidos. |
12 | n | Retorna o número de caracteres lidos até agora. |
13 | p | Ponteiro para a sequência de caracteres específica da implementação. |
A seguir, implementaremos um programa de amostra para demonstrar o uso da função scanf em C ++
Scanf Exemplo
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }
Resultado:
No programa acima, lemos duas strings de entrada e um número hexadecimal. Em seguida, combinamos as duas strings e exibimos a string resultante. O número é convertido em decimal e exibido.
scanf / printf vs. cin / cout em C ++
scanf / printf | cin / custo |
---|---|
Entrada-saída padrão em linguagem C. | Entrada-saída padrão em linguagem C ++. |
Definido em 'stdio.h'. | Definido em 'iostream'. |
scanf e printf são funções usadas para E / S. | cin e cout são objetos de fluxo. |
A string de formato é usada para formatar a entrada e a saída. | Operadores >> e<< are overloaded and used along with cin and cout respectively. Nenhuma string de formato é usada. |
Especificamos o tipo de dados usando o marcador de posição. | Não há necessidade de especificar o tipo de dados. |
perguntas frequentes
P # 1) Você pode usar printf em C ++?
Responda: sim. Printf pode ser usado em C ++. Para usar esta função em um programa C ++, precisamos incluir o cabeçalho no programa.
Q # 2) Qual linguagem usa printf?
Responda: Printf é a função de saída padrão em linguagem C. Ele também pode ser usado na linguagem C ++, incluindo o cabeçalho no programa C ++.
P # 3) O que é% d na programação C?
Responda: O valor% d na função printf refere-se a um valor inteiro.
P # 4) Por que e é usado no Scanf?
Responda: & operator é usado para acessar o local da memória. É uma forma abreviada de passar um ponteiro para a variável em vez de passá-lo explicitamente.
P # 5) Qual é a diferença entre printf () e sprintf ()?
Responda: Ambas as funções printf () e sprintf () são iguais, exceto por uma diferença. Enquanto printf () grava a saída em stdout (saída padrão), o sprintf grava a saída em um buffer de string de caracteres.
Q # 6) O Sprintf null termina?
Responda: sprintf retorna o número de caracteres armazenados na matriz de string de caracteres, excluindo o caractere de terminação nulo.
P # 7) Por que o sprintf não é seguro?
Responda: A função Sprintf não verifica o comprimento do buffer de destino. Portanto, quando o comprimento da string de formato é muito longo, a função pode causar o estouro do buffer de destino. Isso pode levar à instabilidade do aplicativo e problemas de segurança, tornando a função do sprintf insegura.
Conclusão
Neste tutorial, aprendemos as funções de entrada-saída da biblioteca C - printf, sprintf e scanf que podem ser usadas em C ++ incluindo o cabeçalho que é equivalente ao cabeçalho C.
Conforme já discutido, as funções de entrada-saída em usam especificadores de formato e espaços reservados e precisamos especificar os tipos de dados de variáveis em que os dados são lidos ou gravados.
Ao contrário disso, os objetos de streaming usados em C ++ - cin e cout não usam nenhum especificador de formato ou espaço reservado. Eles usam >> sobrecarregado e<< operators to read in and write the data.
=> Confira o guia de treinamento perfeito C ++ aqui.