Enviado em 05/06/2021 - 23:26h
Prof. Paulo1265, antes muito obrigado pela sua ajuda, preciso de mais uma ajuda. Estou trabalhando com o linux - ubuntu 18.04.10. Quando eu compilo o programa listapostal62.c (gcc listacanastra.c -o listacanastra. exe) , não mostra nenhum erro, mas quando executo ./listacanastra.exe, preenhco o programa e quando escecuto o gedit o arquivo (disco) gargoli.txt ele mostra o arquivo com caracteres invalidso em VERMELHO. (CODIFUTF8) , invalido.#include <stdio.h>
#include <ctype.h> // Para toupper
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio_ext.h> // Para __fpurge
#define MAX 2
# define LISTA_TELA 0
# define LISTA_ARQUIVO 1
// Variavel que indica se a lista foi modificada e nao salva
int nao_salvo = 0;
struct addr {
char name[30];
char street[40];
char city[20];
char state[3];
long zip;
}* addr_info;
// Funcao para leitura de uma string de tamanho n
void LerString(char * txt, int n)
{
// Descarrega o buffer e faz a leitura de string
__fpurge(stdin);
fgets(txt, n, stdin);
// Procura por quebras de linha, espacos ou tab no final da string, removendo-os
n = strlen(txt) - 1;
while (txt[n] == '\n' || txt[n] == '\r' || txt[n] == ' ' || txt[n] == '\t')
txt[n--] = 0;
}
// Funcao para validar uma string como CEP. Retorna o cep ou -1 se invalido
long ValidaCEP(char * cep)
{
int i;
// Para ser um cep, a string deve conter 8 (se nao fornecido o hifen) ou 9 caracteres.
if (strlen(cep) == 9 && cep[5] == '-') {
// CEP com hifen. Vamos remove-lo.
for (i = 5; i < 9; i++) {
cep[i] = cep[i + 1];
}
} else if (strlen(cep) != 8) {
return -1; // CEP invalido
}
// Verifica se todos os caracteres sao numericos
for (i = 0; i < 8; i++) {
if (cep[i] < '0' || cep[i] > '9')
return -1; // Encontrado caracter nao numerico, cep invalido.
}
// Se o programa chegou ate aqui, indica que temos um cep valido. Basta retornarmos o cep convertido para long int
return atol(cep);
}
void CarregaCEP(char * cep_txt, int cep_num)
{
int cep_alto, cep_baixo;
cep_alto = cep_num / 1000;
cep_baixo = cep_num - (cep_alto * 1000);
sprintf(cep_txt, "%05d-%03d", cep_alto, cep_baixo);
}
//Otem a seleção
int menu_select(void)
{
char s[80];
printf("1. Inserir um nome\n\n");
printf("2. Excluir um nome \n\n");
printf("3. Listar o arquivo \n\n");
printf("4. Salvar Registros\n\n");
printf("5. Exportar como Texto\n\n");
printf("6. Sair\n\n");
printf("Digite sua escolha:____");
LerString(s, sizeof(s));
return atoi(s);
}
//Encontra um estrutura não usada
int find_free(void)
{
int t;
for (t = 0; addr_info[t].name[0] && t < MAX; t++);
if (t == MAX)
return -1; //nenyhum elemento livre
return t;
}
//Insere os endereços na lista.
void enter(void)
{
int slot;
char s[80];
slot = find_free();
if (slot == -1) {
printf("Lista cheia\n\n");
return;
}
nao_salvo = 1;
printf("Digite o nome: \n\n");
LerString(addr_info[slot].name, sizeof(addr_info[slot].name));
printf("Digite a rua: \n\n");
LerString(addr_info[slot].street, sizeof(addr_info[slot].street));
printf("Digite a cidade: \n\n");
LerString(addr_info[slot].city, sizeof(addr_info[slot].city));
printf("Digite o Estado: \n\n");
LerString(addr_info[slot].state, sizeof(addr_info[slot].state));
do {
printf("Digite o CEP: \n\n");
LerString(s, sizeof(s));
addr_info[slot].zip = ValidaCEP(s);
if (addr_info[slot].zip < 0) {
printf("CEP invalido!\n");
}
} while (addr_info[slot].zip < 0);
}
int procura(char * nome)
{
int t;
for (t = 0; t < MAX; t++) {
if (!strcmp(nome, addr_info[t].name))
return t;
}
return -1;
}
//Apaga um endereço
void delete() {
int slot;
char s[80];
printf(" Digite o registro #:\n\n");
LerString(s, sizeof(s));
slot = atoi(s);
if (slot >= 0 && slot < MAX) {
addr_info[slot].name[0] = 0;
nao_salvo = 1;
}
}
//Mostra lista na tela
void list(int tipo)
{
int t;
FILE * saida;
char txt[10];
if (tipo == LISTA_TELA) {
saida = stdout;
} else {
saida = fopen("gargoli.txt", "w");
if (saida == NULL) {
printf("Erro abrindo arquivo!\n");
}
}
for (t = 0; t < MAX; ++t) {
if (addr_info[t].name[0]) {
fprintf(saida, "---------------------------------\n");
fprintf(saida, "Registro %d\n", t);
fprintf(saida, "%s \n", addr_info[t].name);
fprintf(saida, "%s \n", addr_info[t].street);
fprintf(saida, "%s \n", addr_info[t].city);
fprintf(saida, "%s \n", addr_info[t].state);
CarregaCEP(txt, addr_info[t].zip);
fprintf(saida, "%s \n", txt);
if (tipo == LISTA_TELA && t && !(t % 5))
sleep(4);
}
}
fprintf(saida, "\n\n");
if (tipo == LISTA_ARQUIVO) {
fclose(saida);
}
}
int salva(void) {
FILE * dadosHd;
dadosHd = fopen("gargoli.txt", "w");
fwrite(addr_info, sizeof(struct addr), MAX, dadosHd);
fclose(dadosHd);
nao_salvo = 0;
return 0;
}
void inicia(void) {
FILE * dadosHd;
addr_info = malloc(sizeof(struct addr) * MAX);
dadosHd = fopen("gargoli.txt", "w");
if (dadosHd != NULL) {
fread(addr_info, sizeof(struct addr), MAX, dadosHd);
printf("%d ------------------<\n", sizeof(struct addr));
printf("nome - %s\n", addr_info[0].name);
fclose(dadosHd);
} else {
memset(addr_info, 0, sizeof(struct addr) * MAX);
printf("Arquivo inexistente\n");
}
}
int main(void)
{
char choice;
inicia();
printf("Legal heim\n\n\n");
for (;;) {
choice = menu_select();
switch (choice) {
case 1:
enter();
break;
case 2:
delete();
break;
case 3:
list(LISTA_TELA);
break;
case 4:
salva();
break;
case 5:
list(LISTA_ARQUIVO);
break;
case 6:
if (nao_salvo) {
printf("Lista nao salva desde a ultima modificacao! Sair mesmo assim? (S/N): ");
if (toupper(getchar()) != 'S') // Nao confirmou, continuar o programa.
break;
}
exit(0);
break;
default:
printf("Opcao invalida!\n");
}
}
}
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Não consigo acessar os modos de desempenho (2)
Ubuntu — tentando iniciar o windows? (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba