scanf, fscanf, sscanf ou wsscanf Subroutine
Propósito
Converte entrada formatada.
Biblioteca
Biblioteca C Padrão (libc.a)
ou (libc128.a)
Sintaxe
#include <stdio.h>
const char * String, *Format;
Descrição
As subroutines scanf, fscanf, sscanfe wsscanf lêem dados de caracteres, interpretam de acordo com um formato, e armazenam os resultados convertidos em locais de memória especificados. Se a subroutine receber argumentos insuficientes para o formato, os resultados não são confiáveis. Se o formato está esgotado enquanto os argumentos permanecem, a subroutine avalia o excesso de argumentos mas de outra forma os ignora.
Estas subroutines lêem sua entrada a partir das seguintes fontes:
| Item | Descrição |
|---|---|
| scanf | Lê a partir da entrada padrão (stdin). |
| fscanf | Lê-se a partir do parâmetro Fluxo. |
| sscanf | Lê-se a partir da cadeia de caracteres especificada pelo parâmetro Sequência . |
| wsscanf | Lê-se a partir da cadeia de caracteres ampla especificada pelo parâmetro wcs . |
As subroutines scanf, fscanf, sscanfe wsscanf podem detectar um caractere de radix dependente do idioma, definido no locale do programa (LC_NUMÉRICO), na cadeia de entrada. No código locale C, ou em um locale que não define o caractere radix, o caractere de radix padrão é uma parada completa. (ponto).
Parâmetros
| Item | Descrição |
|---|---|
| wcs | Especifica a cadeia de caracteres ampla a ser lida. |
| Fluxo | Especifica o fluxo de entrada. |
| Sequência | Especifica entrada para ser lida. |
| Ponteiro | Especifica onde armazenar os dados interpretados. |
| Formato | Contém especificações de conversão usadas para interpretar a entrada. Se houver argumentos insuficientes para o parâmetro Formato , os resultados não são confiáveis. Se o parâmetro Formato estiver esgotado enquanto os argumentos permanecem, os argumentos em excesso são avaliados como sempre mas são ignorados de outra forma. O parâmetro Formato pode conter o seguinte:
|
| Item | Descrição |
|---|---|
| Formato (cont.) |
|
Os resultados da conversão são colocados no local de memória designado pelo parâmetro Ponteiro , a menos que você especifique supressão de designação com um * (asterisco). A supressão de designação fornece uma maneira de descrever um campo de entrada a ser ignorada. O campo de entrada é uma sequência de caracteres de espaços não brancos. Ele se estende até o próximo caractere inadequado ou até que a largura do campo, se especificado, esteja esgotada.
O código de conversão indica como interpretar o campo de entrada. O parâmetro Ponteiro correspondente deve ser um tipo restrito. Não especifique o parâmetro Ponteiro para um campo suprimido. Você pode utilizar os seguintes códigos de conversão:
- %
- Aceita uma entrada única% (sinal de percentual) neste ponto; nenhuma atribuição ou conversão é feita. A especificação de conversão completa deve ser %% (dois sinais de percentual).
- D
- Aceita um número inteiro decimal opcionalmente assinado com o mesmo formato que o esperado para a sequência de assunto da subroutine strtol com um valor de 10 para o parâmetro base . Se nenhum modificador de tamanho for especificado, o parâmetro Ponteiro deverá ser um ponteiro para um inteiro.
- i
- Aceita um número inteiro opcionalmente assinado com o mesmo formato que o esperado para a sequência de assunto da subroutine strtol com um valor de 0 para o parâmetro base . Se nenhum modificador de tamanho for especificado, o parâmetro Ponteiro deverá ser um ponteiro para um inteiro.
- u
- Aceita um número inteiro decimal opcionalmente assinado com o mesmo formato que o esperado para a sequência de assunto da subroutine estrtoul com um valor de 10 para o parâmetro base . Se nenhum modificador de tamanho for especificado, o parâmetro Ponteiro deverá ser um ponteiro para um inteiro não assinado.
- o
- Aceita um inteiro octal opcionalmente assinado com o mesmo formato que o esperado para a sequência de assunto da subroutine estrtoul com um valor de 8 para o parâmetro base . Se nenhum modificador de tamanho for especificado, o parâmetro Ponteiro deverá ser um ponteiro para um inteiro não assinado.
- X
- Aceita um inteiro hexadecimal assinado opcionalmente com o mesmo formato que o esperado para a sequência de assunto da subroutine estrtoul com um valor de 16 para o parâmetro base . Se nenhum modificador de tamanho for especificado, o parâmetro Ponteiro deverá ser um ponteiro para um inteiro.
- e, fou g
- Aceita um número de ponto flutuante opcionalmente assinado com o mesmo formato que o esperado para a sequência de assunto da subroutine strtod . O campo seguinte é convertido em conformidade e armazenado através do parâmetro correspondente; se nenhum modificador de tamanho for especificado, este parâmetro deverá ser um ponteiro para um float. O formato de entrada para números de ponto flutuante é uma sequência de algarías, com algumas características opcionais:
- Pode ser um valor assinado.
- Ele pode ser um valor exponencial, contendo um número decimal decimal seguido de um campo expoente, que consiste em um E ou um e seguido de um inteiro (opcionalmente assinado).
- Ele pode ser um dos valores especiais INF, NaNQ ou NaNS. Esse valor é convertido no valor IEEE-754 para infinito, NaN silencioso ou NaN de sinalização, respectivamente.
- P
- Corresponde um número inteiro hexadecimal não assinado, o mesmo que a conversão %p da subroutine printf . O parâmetro correspondente é um ponteiro para um ponteiro vazio. Se o item de entrada for um valor convertido anteriormente durante a mesma execução do programa, o ponteiro resultante se compara igual a esse valor; caso contrário, os resultados da conversão %p são imprevisíveis.
- n
- Consome sem entrada. O parâmetro correspondente é um ponteiro para um inteiro no qual o subbroutine scanf, fscanf, sscanfou wsscanf grava o número de caracteres (incluindo caracteres amplos) lidos a partir do fluxo de entrada. A contagem de designações retornadas na conclusão desta função não é incrementada.
- s
- Aceita uma sequência de caracteres de espaço não branco (scanf, fscanfe sscanf subroutines). A subroutine wsscanf aceita uma sequência de códigos de caracteres de largura não-branco-espaço; esta sequência é convertida em uma sequência de caracteres da mesma maneira que a subroutine wcstombs . O parâmetro Ponteiro deve ser um ponteiro para o byte inicial de um char, assinado char, ou unsigned char array grande o suficiente para segurar a sequência e um código de caracteres nula de terminação, que é automaticamente adicionado.
- S
- Aceita uma sequência de caracteres de espaço não branco (scanf, fscanfe sscanf subroutines). Esta sequência é convertida em uma sequência de códigos de caracteres amplos da mesma maneira que a subroutina mbstowcs . A subroutine wsscanf aceita uma sequência de códigos de caracteres de largura não-branco-espaço. O parâmetro Ponteiro deve ser um ponteiro para o código de caracteres de largura inicial de uma matriz grande o suficiente para aceitar a sequência e um código de caracteres de largura nula de terminação, que é automaticamente adicionado. Se a largura do campo for especificada, ele denota o número máximo de caracteres a aceitar.
- c
- Aceita uma sequência de bytes do número especificado pela largura do campo (scanf, fscanf e sscanf subroutines); se nenhuma largura de campo for especificada, 1 é o padrão. A subroutine wsscanf aceita uma sequência de códigos de caracteres amplos do número especificado pela largura do campo; se nenhuma largura de campo for especificada, 1 é o padrão. A sequência é convertida em uma sequência de caracteres da mesma maneira que a subroutine wcstombs . O parâmetro Ponteiro deve ser um ponteiro para os bytes iniciais de uma matriz grande o suficiente para segurar a sequência; nenhum byte nulo é adicionado. O pulo normal sobre o espaço em branco não ocorre.
- C
- Aceita uma sequência de caracteres do número especificado pela largura do campo (scanf, fscanfe sscanf subroutines); se nenhuma largura de campo for especificada, 1 é o padrão. A sequência é convertida em uma sequência de códigos de caracteres amplos da mesma maneira que a subroutina mbstowcs . A subroutine wsscanf aceita uma sequência de códigos de caracteres amplos do número especificado pela largura do campo; se nenhuma largura de campo for especificada, 1 é o padrão. O parâmetro Ponteiro deve ser um ponteiro para o código de caracteres de largura inicial de uma matriz grande o suficiente para segurar a sequência; nenhum código de caracteres de largura nula é adicionado.
- [scanset]
- Aceita uma sequência não vazia de bytes a partir de um conjunto de bytes esperados especificado pela variável scanset (scanf, fscanfe sscanf subroutines). A subroutine wsscanf aceita uma sequência não vazia de códigos de caracteres amplos a partir de um conjunto de códigos de caracteres bastante esperados especificados pela variável scanset . A sequência é convertida em uma sequência de caracteres da mesma maneira que a subroutine wcstombs . O parâmetro Ponteiro deve ser um ponteiro para o caractere inicial de um char, assinado charou sem assinatura char matriz grande o suficiente para segurar a sequência e um byte null de terminação, que é automaticamente adicionado. Nas subroutines scanf, fscanfe sscanf , a especificação de conversão inclui todos os bytes subsequentes na string especificada pelo parâmetro Formato , até e incluindo o] (suporte direito). Os bytes entre os suportes compreendem a variável scanset , a menos que o byte após o [(suporte esquerdo) seja um ^ (circumflex). Neste caso, a variável scanset contém todos os bytes que não aparecem na scanlist entre o ^ (circumflex) e o] (suporte direito). Na subroutine wsscanf , os caracteres entre os suportes são primeiramente convertidos em códigos de caracteres amplos da mesma maneira que o subroutine mbtowc . Esses códigos de caracteres amplos são então usados como descrito acima no lugar dos bytes na scanlist. Se a especificação de conversão começar com [] ou [^], o suporte direito será incluído na scanlist e o suporte da próxima direita é o suporte de direita correspondente que acaba com a especificação de conversão. Você também pode:
- Representar uma gama de caracteres pela construção Primeiro-Último. Assim, você pode expressar [0123456789] como [0-9]. O parâmetro Primeiro deve ser lexicamente menor ou igual ao parâmetro Último ou então o-(traço) representa para si mesmo. O-também fica por si mesmo sempre que é o primeiro ou o último caractere na variável scanset .
- Inclua o] (suporte direito) como um elemento da variável scanset se ele for o primeiro caractere do scanset. Neste caso ele não é interpretado como o suporte que fecha a variável scanset . Se a variável scanset for uma variável exclusiva scanset , o] é precedido pelo ^ (circumflex) para fazer do] um elemento do scanset. O parâmetro Ponteiro correspondente deve apontar para uma matriz de caracteres grande o suficiente para segurar o campo de dados e que termina com um caractere nulo (\0). O \0 é incluído automaticamente.
Uma conversão scanf termina no final-de-arquivo (caractere EOF), no final da cadeia de controle ou quando um caractere de entrada conflata com a cadeia de controle. Se ele terminar com um conflito de caracteres de entrada, o caractere conflitante não é lido a partir do fluxo de entrada.
A menos que uma correspondência na cadeia de controle exista, o espaço em branco rasteiro (incluindo um caractere de nova linha) não é lido.
O sucesso de correspondências literais e assignações suprimidas não é diretamente determinável.
As extensões do National Language Support (NLS) para as subroutines scanf podem manipular uma string de formato que possibilita que o sistema processe elementos da lista de argumentos em ordem variável. O caractere de conversão normal% é substituído por%n$, onde n é um número decimal. Conversões são, então, aplicadas ao argumento especificado (ou seja, o nth argumento), em vez de para o próximo argumento não utilizado.
The first successful run of the fgetc, fgets, freada, getc, getchar, fica, scanf, or fscanf subroutine using a stream that returns data not supplied by a prior call to the ungetc (ingetc ou ungetwc Subroutine) subroutine marks thest_atimecampo para atualização.
Valores De Retorno
Essas subroutines retornam o número de itens de entrada com sucesso de correspondência e atribuídos. Este número pode ser 0 se um conflito inicial existisse entre um caractere de entrada e a cadeia de controle. Se a entrada terminar antes do primeiro conflito ou conversão, apenas EOF é retornado. Se ocorrer um erro de leitura, o indicador de erro para o fluxo será configurado, EOF será retornado e a variável global errno será definida para indicar o erro.
Códigos De Erro
As subroutines scanf, fscanf, sscanfe wsscanf não são bem-sucedidas se ou o arquivo especificado pelo parâmetro Fluxo, Sequênciaou wcs estiver sem buffer ou dados precisa ser lido no buffer do arquivo e uma ou mais das seguintes condições é verdadeira:
| Item | Descrição |
|---|---|
| EAGAIN | O sinalizador O_NONBLOCK é configurado para o descritor de arquivo subjacente ao arquivo especificado pelo parâmetro Fluxo, Sequênciaou wcs , e o processo seria retardado na operação scanf, fscanf, sscanf, ou wsscanf . |
| EBADF | O descritor de arquivo subjacente ao arquivo especificado pelo parâmetro Fluxo, Sequênciaou wcs não é um descritor de arquivo válido aberto para leitura. |
| EINTR | A operação de leitura foi finalizada devido ao recebimento de um sinal, e nem nenhum dado foi transferido ou uma transferência parcial não foi informada. |
| Item | Descrição |
|---|---|
| EIO | O processo é um membro de um grupo de processos de background tentando realizar uma leitura a partir de seu terminal de controle, e ou o processo está ignorando ou bloqueando o sinal SIGTTIN ou o grupo de processos não tem nenhum processo pai. |
| EINVAL | A subroutine recebeu argumentos insuficientes para o parâmetro Formato . |
| EILSEQ | Uma sequência de caracteres que não é válida foi detectada, ou um código de caráter amplo não corresponde a um caractere válido. |
| ENOMEM | O espaço de armazenamento insuficiente está disponível. |