cursos:if63c:exemplos
Característica | Solução em C | Solução em C++ |
---|---|---|
Lista Sequencial | Implementada manualmente com array de structs e um contador. | Utiliza std::vector, um contêiner dinâmico e seguro da STL. |
Gerenciamento de Memória | Estático. O tamanho máximo da lista é fixo (MAX_PESSOAS). | Dinâmico. std::vector cresce conforme necessário, sem um limite pré-definido. |
Leitura de Arquivo | Usa FILE* e funções como fopen, fgets e sscanf. | Usa std::ifstream (orientado a objetos), que é mais seguro e gerencia o recurso automaticamente (RAII). |
Manipulação de Strings | Utiliza char[] e funções da biblioteca <string.h>. | Utiliza std::string, que é mais fácil e seguro de manipular. |
Robustez | Requer mais cuidado manual para evitar estouro de buffer e outros erros. | Mais robusto devido ao uso de classes e contêineres da STL que abstraem a complexidade. |
Os trabalhos devem ser em C ANSI
Exemplo Programa em C ANSI para ler um arquivo com dados no formato “Nome,RG”.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PESSOAS 50 #define TAMANHO_MAX_NOME 100 #define TAMANHO_MAX_RG_STR 15 #define TAMANHO_MAX_LINHA 128 typedef struct { char nome[TAMANHO_MAX_NOME]; long int rg; } Pessoa; int carregarPessoas(Pessoa listaPessoas[], int tamanhoMaximo, const char *nomeArquivo) { FILE *ponteiroDoArquivo = fopen(nomeArquivo, "r"); if (ponteiroDoArquivo == NULL) { perror("Erro ao abrir o arquivo"); return 0; } char linha[TAMANHO_MAX_LINHA]; int contador = 0; while (contador < tamanhoMaximo && fgets(linha, sizeof(linha), ponteiroDoArquivo)) { char nome_temp[TAMANHO_MAX_NOME]; char rg_string_temp[TAMANHO_MAX_RG_STR]; if (sscanf(linha, "%99[^,],%14s", nome_temp, rg_string_temp) == 2) { strcpy(listaPessoas[contador].nome, nome_temp); listaPessoas[contador].rg = atol(rg_string_temp); contador++; } } fclose(ponteiroDoArquivo); return contador; } void mostrarLista(const Pessoa listaPessoas[], int totalPessoas) { printf("--- Lista de Pessoas ---\n\n"); if (totalPessoas == 0) { printf("Nenhuma pessoa para exibir.\n"); return; } for (int i = 0; i < totalPessoas; i++) { printf("Nome: %s\n", listaPessoas[i].nome); printf("RG: %ld\n", listaPessoas[i].rg); printf("-----------------------------------\n"); } } int main() { Pessoa minhaLista[MAX_PESSOAS]; int totalCarregado = carregarPessoas(minhaLista, MAX_PESSOAS, "dados_rg.txt"); mostrarLista(minhaLista, totalCarregado); return 0; }
cursos/if63c/exemplos.txt · Last modified: 2025/08/23 20:39 by fonseca