Skip to content

Instantly share code, notes, and snippets.

@geovannaotoni
Last active November 21, 2023 19:25
Show Gist options
  • Save geovannaotoni/a986b5b2330989b4d351cdae7f1a6be0 to your computer and use it in GitHub Desktop.
Save geovannaotoni/a986b5b2330989b4d351cdae7f1a6be0 to your computer and use it in GitHub Desktop.
Linguagem C

Linguagem C

Tipos de Variáveis

C oferece diversos tipos de variáveis, incluindo:

  • Inteiros (int): Armazenam números inteiros, podendo ser modificados por palavras-chave como unsigned e long.
  • Ponto Flutuante (float): Armazenam números com parte decimal.
  • Caracteres (char): Armazenam caracteres individuais.
  • Ponteiros (*): Referenciam o endereço de memória de uma variável.

Tipos de Saída

Ao utilizar a função printf, os principais formatos de saída incluem:

  • %c: Caractere.
  • %d: Inteiro.
  • %f: Ponto flutuante.
  • %s: String.

Funções printf e scanf

  • printf: Exibe dados na saída padrão.
  • scanf: Lê dados da entrada padrão. Utiliza formatos como %d, %f, %c, %s para interpretar os dados de entrada.

Operadores

  • Unários: +, -, ++, --.
  • Binários: +, -, *, /, %, ==, !=, &&, ||, entre outros.

Comandos de Repetição

C oferece comandos de repetição, como:

  • for: Executa um bloco de código um número específico de vezes.
  • while: Executa um bloco enquanto uma condição é verdadeira.
  • do-while: Similar ao while, mas garante que o bloco de código é executado pelo menos uma vez.

Arrays

Arrays são conjuntos de variáveis do mesmo tipo. Para declarar e inicializar:

int numeros[5] = {1, 2, 3, 4, 5};

Strings

Strings em C são arrays de caracteres.

Obs: Na inicialização de strings, utiliza-se aspas duplas. Na atribuição de caracteres, utiliza-se aspas simples.

Manipulando strings:

Utilizar a biblioteca #include <string.h>

Principais Funções:

  • strlen(str): Retorna o comprimento de uma string.
  • strcpy(string_destino, string_origem): Copia uma string para outra.
  • strcmp(string1, string2): Compara duas strings e retorna: 0 se forem iguais, menor que 0 se a primeira string é menor que a segunda em ordem lexicográfica e maior que 0 caso contrário.
  • strcat(string_destino, string_origem): Concatena duas strings.
  • fgets(string, tamanho, stdin): Lê até n caracteres do fluxo de entrada especificado e armazena-os em uma string.
    • a função fgets lê o caractere de nova linha '\n', geralmente é necessário substituí-lo por um caractere nulo string[strlen(string)-1] = '\0';
    • scanf x gets x fgets: o scanf("%s", string) lê até o primeiro espaço, o gets(str) lê até digitar enter e o fgets lê até que o usuário pressione Enter e considera o caractere nulo como um caractere válido.
  • fputs(string, stdout): Escreve no fluxo de arquivo a string.
  • getchar(): usada para ler um único caractere do teclado do usuário.

Structs

Structs permitem agrupar diferentes tipos de variáveis sob um mesmo nome. Exemplo:

struct Pessoa {
    char nome[50];
    int idade;
};

Funções

Declarar Funções: tipo_retorno nome_funcao(tipo_parametro1 param1, tipo_parametro2 param2) { /* corpo */ } Parâmetros: Podem ser passados por valor ou referência.

  • Passagem por Valor: Nesse método, o valor da variável é copiado para o parâmetro da função. Alterações no parâmetro não afetam a variável original fora da função. Exemplo:
void funcao_por_valor(int x) {
    x = x + 1;
}

int main() {
    int numero = 5;
    funcao_por_valor(numero);
    // 'numero' continua sendo 5, pois a função recebeu uma cópia de 'numero'
}
  • Passagem por Referência: Nesse método, em vez de passar o valor real, você passa o endereço de memória da variável. Assim, a função pode modificar o conteúdo da variável original. Exemplo:
void funcao_por_referencia(int *x) {
    *x = *x + 1;
}

int main() {
    int numero = 5;
    funcao_por_referencia(&numero);
    // 'numero' agora é 6, pois a função modificou diretamente a variável original
}
  • Ponteiros como Parâmetros: Em C, para realizar a passagem por referência, geralmente se usam ponteiros. Os ponteiros armazenam endereços de memória, permitindo que a função acesse e modifique o conteúdo diretamente.

Arquivos

São uma coleção de bytes armazenados em um dispositivo. Operações com arquivos em C envolvem:

  1. Abertura (fopen): Abre um arquivo para leitura ou escrita. FILE *fopen(char *nome_arquivo, char *modo);. Retorna NULL quando erro ou ponteiro para o tipo FILE quando sucesso.
  2. Fechamento (fclose): Encerra o acesso a um arquivo. int fclose(FILE *ponteiro_arquivo); Retorna 0 quando sucesso.
  3. Leitura/ Escrita de Caracteres:
  • fgetc(FILE *fp): int fgetc(FILE *ponteiro_arquivo);
  • fputc(FILE *fp): int fputc(int caractere, FILE *ponteiro_arquivo);
  1. Leitura/ Escrita de String:
  • fgets(string, tamanho, arquivo)
  • fputs(string, arquivo)
  1. Leitura/ Escrita de blocos de dados
  • fread(): fread(string, sizeof(char), strlen(string), FILE *ponteiro_arquivo);
  • fwrite(): fwrite(string, sizeof(char), strlen(string), FILE *ponteiro_arquivo);
  1. Leitura/ Escrita por fluxo padrão:
  • fscanf(): fscanf(arquivo, "%d", &valor);
  • fprintf(): fprintf(arquivo, "%d", variavel);
  1. Mover pelo arquivo: fseek(FILE *ponteiro_arquivo, long int deslocamento, int origem);
  2. Deletar arquivo: int remove(char *nome_arquivo)

Modos de abertura:

FILE *arquivo = fopen("exemplo.txt", modo);

  • "r" (read)
  • "w" (write)
  • "a" (append): Abre o arquivo para escrita no final.
  • "rb", "wb", "ab" (modo binário): Modos de abertura binária, usados para arquivos binários

Formas de recebimento do nome do arquivo

// Opção 1 - O nome do arquivo deve ser solicitado pelo programa
    char arq[100];
    fgets(arq, 100, stdin); // solicitar o arquivo
    arq[strlen(arq) - 1] = '\0'; // altera o \n para \0
    
// Opção 2 - O nome do arquivo deve ser passado para o programa como PARÂMETRO de entrada
// Passar passar um arquivo como parâmetro para o programa, é necessário passar 2 paramêtros para a função: 
// argc: número de argumentos passados para o programa na linha de comando
// argv: um array de strings que contém os argumentos passados para o programa
int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Digite o nome do arquivo em txt\n");
        system("pause");
        exit(1);
    }
}

Tratamento de erro ao abrir um arquivo:

    FILE *arquivo; // manipulador do arquivo
    arquivo = fopen(arq, "rb"); // abertura do arquivo binário para leitura
    
    if(arquivo == NULL) {
        printf("Erro na abertura do arquivo\n");
        system("pause");
        exit(1);
    }
    fclose(arquivo);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment