Exemplos de Código em C: Registros, Ponteiros, Alocação e Arquivos

Classificado em Grego

Escrito em em português com um tamanho de 5,7 KB

Exemplos de Código

Registro

#include <stdio.h>
#include <string.h>
#include <conio.h>
#define MEDIA 5
main ()
{
    struct reg
    {
        char cnome [30];
        int inota1;
        float fnota2;
    };
    struct reg aluno;
    float media;
    printf ("\nQual o nome ? ");
    scanf ("%s",aluno.cnome);
    while (strcmp (aluno.cnome,"fim") != 0)
    {
        printf ("\nQual a primeira nota ? ");
        scanf ("%d",&aluno.inota1);
        printf ("\nQual a segunda nota ? ");
        scanf ("%f",&aluno.fnota2);
        media = (aluno.inota1 + aluno.fnota2) / 2;
        printf ("\nComo a media eh %d", MEDIA);
        printf ("\n e %s ficou com %6.2f de media :\nEle esta %s",aluno.cnome, media,(media >= MEDIA ? "Aprovado" : "Reprovado"));
        printf ("\n \nQual o nome ? ");
        scanf ("%s",aluno.cnome);
    }
}

Ponteiros e Vetores

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define max 10
main()
{
    int A [max];
    int *p;
    randomize;
    for (int i = 0; i < max; i++)
    {
        A [i] = random (100);
    }
    p = A; // p = &(A [0]);
    printf ("\nEndereco inicial do vetor = %p",A);
    printf ("\nEndereco do ponteiro p = %p",&p);
    printf ("\nEndereco para o qual p aponta = %p",p);
    printf ("\nMostrando com for \n");
    for (int i = 0; i < max; i++)
    {
        printf ("%d, ", A [i]);
    }
    printf ("\nMostrando com ponteiro (endereco_base + deslocamento)\n");
    for (int i = 0; i < max; i++)
    {
        printf ("%d, ",*(p+i));
    }
    printf ("\nMostrando com ponteiro semelhante a um vetor\n");
    for (int i = 0; i < max; i++)
    {
        printf ("%d, ",p [i]);
    }
    getch();
}

Ponteiro Exemplo 2

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define max 10
main()
{
    int A [max];
    int *p, *q;
    randomize;
    for (int i = 0; i < max; i++)
    {
        A [i] = random (100);
    }
    p = &(A [max - 1]);
    q = &(A [0]); // q = A;
    printf ("\nEndereco inicial do vetor = %p",A); // 0065FDC8
    printf ("\nEndereco do ponteiro p = %p",&p); // 0065FE00
    printf ("\nEndereco para o qual p aponta = %p",p); // 0065FDEC
    printf ("\nEndereco do ponteiro q = %p",&q); // 0065FDFC
    printf ("\nEndereco para o qual q aponta = %p",q); // 0065FDC8
    printf ("\n p - q = %d",p-q); // 9 inteiros
    // 0065FDEC - 0065FDC8 = 24h = 36d = 9 inteiros
    printf ("\nMostrando com for \n");
    for (int i = 0; i < max; i++)
    {
        printf ("%d, ", A [i]);
    }
    printf ("\nMostrando com ponteiro de um extremo a outro \n");
    for (int i = 0; i < max; i++)
    {
        printf ("[%d, %d], ",*(q),*(p));
        p = p - 1; // p--
        q = q + 1; // q++
    }
    getch();
}

Alocação Dinâmica

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int criarvetor (int n);
void lervetor (int n);
void mostrarvetor (int n);
int *idades; // ponteiro utilizado na alocação

int criarvetor (int n)
{
    int result = 1;
    idades = (int *) malloc ((n) * sizeof(int)); // alocação
    if (idades == NULL)
    {
        printf ("\nErro reservando memoria");
        result = 0;
    }
    return result;
}

void lervetor (int n)
{
    int *cont = idades;
    for (int i = 0; i < n; i++)
    {
        printf ("\nDigite o elemento %d ", i + 1);
        scanf ("%d", cont++);
    }
}

void mostrarvetor (int n)
{
    int *cont = idades;
    for (int i = 0; i < n; i++)
    {
        printf ("\nO elemento %d eh %d ", i + 1, *cont++);
    }
}

main()
{
    int n;
    printf ("\nQuantas idades deseja cadastrar ? ");
    scanf ("%d", &n);
    if (criarvetor(n))
    {
        lervetor(n);
        mostrarvetor(n);
        getch();
        free (idades); // Liberar memória alocada
    }
}

Arquivos

Abrir para Gravação

#include <stdio.h>
#include <conio.h>
main()
{
    FILE *fout;
    fout = fopen ("teste.txt", "w");
    // Conteúdo de teste.txt é destruído
    if (fout == NULL)
    {
        printf ("Erro ao abrir arquivo para gravacao\n");
    }
    else
    {
        printf ("O arquivo foi aberto para gravacao\n");
        fprintf (fout, "Isto é escrito em teste.txt\n");
        fclose (fout);
    }
    printf ("Pressione uma tecla para terminar\n");
    getch();
}

Somente Leitura e Depois Gravação

#include <stdio.h>
#include <conio.h>
main()
{
    FILE *fout, *fin;
    fin = fopen ("teste.txt", "r");
    if (fin == NULL)
    {
        printf ("Erro ao abrir arquivo para leitura\n");
    }
    else
    {
        printf ("O arquivo foi aberto para leitura\n");
        fclose (fin);
    }
    fout = fopen ("teste.txt", "w");
    // Conteúdo de teste.txt é destruído
    if (fout == NULL)
    {
        printf ("Erro ao abrir arquivo para gravacao\n");
    }
    else
    {
        printf ("O arquivo foi aberto para gravacao\n");
        fprintf (fout, "Isto é escrito em teste.txt\n");
        fclose (fout);
    }
    printf ("Pressione uma tecla para terminar\n");
    getch();
}

Abrir Arquivo e Ler Valores Float

#include <stdio.h>
#include <conio.h>
main()
{
    // Exemplo de uso de fscanf
    // Leitura de dados float de um arquivo
    FILE *fin;
    float fdados;
    fin = fopen ("Floats.txt", "r");
    if (fin == NULL)
    {
        printf ("Erro ao abrir arquivo para leitura\n");
    }
    else
    {
        while (fscanf (fin, "%f", &fdados) != EOF)
        {
            printf ("\n%6.2f", fdados);
        }
        fclose (fin);
    }
    getch();
}

Entradas relacionadas: