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
