1
resposta

Quando usar %s %d %c

Boa noite,

Pra mim está um pouco confuso para entender quando uso o %s ou %d, e em alguns casos o %c. Pegando como exemplo o trecho abaixo:

    fseek(f, 0, SEEK_SET);
    fprintf(f, "%d", qtd);

    fseek(f, 0, SEEK_END);
    fprintf(f, "\n%s", novapalavra);

Para função fprintf foi usado %d acima e %s abaixo, o que difere os dois? Como eu consigo saber se na função chamada eu uso %d, %s, %c ou outro?

Obrigado pela atenção. Abraço

1 resposta

%d, %s e %c, o que chamamos especificadores de formato, são usados em funções de IO para definir o tipo de dado a ser lido/escrito. Particularmente úteis quando se tem interesse em usar dados formatados. Todos os especificadores começam com o caráter %, seguido de um ou mais caracteres. Estes que você citou, em particular, designam, respectivamente, inteiro, string e caráter.

Para uma lista mais completa, veja o link

No seu caso em concreto:

fseek(f, 0, SEEK_SET);
// imprime o valor de qtd no arquivo apontado por f
// qtd é uma variável inteira
fprintf(f, "%d", qtd); 

fseek(f, 0, SEEK_END);
// imprime o conteúdo de novapalavra no arquivo apontado por f
// novapalavra é uma string
fprintf(f, "\n%s", novapalavra);

A função fprintf é declarada como:

int fprintf(FILE * restrict stream, const char * restrict format, ...);

Isso significa 2 argumentos obrigatórios e uma lista variável de argumentos adicionais. A saber, o primeiro aponta para um arquivo, o segundo é uma string que descreve o formato/tabulação dos dados, os demais argumentos devem coincidir com a string de formato, substituindo, termo a termo, os elementos contidos na string.

Ex:

#include <stdio.h>

int main(int argc, char *argv[]) {
    const int d = 1;
    const char *const s = "um";
    const char c = '1';

    fprintf(stdout, "%d - %s - %c\n", d, s, c);

    return 0;
}