Ir ao conteúdo
  • Cadastre-se

William Dias

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Tudo que William Dias postou

  1. Olá! Me lembro de ter tentado algo parecido porém não tenho certeza. Irei testar. Mas pelo que entendi, cada "novo" retornado pela função é um nó da lista, que na função main é atribuído a "l", assim, mantendo uma sequência, porém não tenho certeza... Vou postar meu código completo para uma melhor análise. adicionado 8 minutos depois @arfneto Muito grato pela atenção! Interessante o seu raciocínio, irei estuda-lo com mais calma, programação ainda é um pouco complexo para mim, rs! Consegui "resolver" chamando a função várias vezes, porém sim, está lendo tudo invertido... Segue o meu código completo para melhor análise: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <dirent.h> //--------estrutura-------- typedef struct lista { char nome[20]; char sobrenome[20]; int RG; int n_voo; struct lista *prox; }Lista; //-------protótipos-------- Lista *inicializa (void); Lista *insere (Lista *l); Lista *insereTxt (Lista *l, char line[]); Lista *busca (Lista *); Lista *libera(Lista *l); Lista *retira (Lista *l); void criaTxt(Lista *l); void DisplayList (Lista *l); void vazia (Lista *l); //----------inicio---------- int main (void){ Lista *l; /* declara uma lista não inicializada */ l = inicializa(); /* inicializa lista como vazia */ int mOpcao; do{ printf("\n----------------------------MENU-----------------------------\n"); printf("Para ADICIONAR um novo passageiro, pressione \t1:\n"); printf("Para REMOVER um passageiro, pressione \t\t2:\n"); printf("Para LISTAR os passageiros, pressione \t\t3:\n"); printf("Para BUSCAR um passageiro, pressione \t\t4:\n"); printf("Para IMPORTAR uma lista, pressione \t\t5:\n"); printf("Para SALVAR alteracoes, pressione \t\t6:\n"); printf("Para SAIR do programa, pressione \t\t7:\n"); printf("----------------------------MENU-----------------------------\n"); printf("\n --> DIGITE UMA DAS opções DO MENU E PRESSIONE ENTER: "); scanf("%d", &mOpcao); switch (mOpcao){ case 1: l = insere(l); system("cls"); break; case 2: retira(l); system("cls"); break; case 3: DisplayList(l); system("cls"); break; case 4: busca(l); system("cls"); break; case 5: if(l != NULL) l = libera(l); char line[50]; system("ls"); FILE *voo; voo = fopen("voo.txt","r"); printf("\n----------------------IMPORTANDO LISTA-----------------------\n"); while(fgets(line, 50, voo) != NULL) l = insereTxt(l, line); fclose(voo); printf("\n --> Lista importada com sucesso!\n\n"); system("pause"); system("cls"); break; case 6: criaTxt(l); system("cls"); break; } }while(mOpcao != 7); //vazia(l); system("pause"); return 0; } Lista *inicializa (void){//inicializa lista. return NULL; } void DisplayList(Lista *l){ Lista *novo=l; printf("\n--------------------LISTA DE PASSAGEIROS---------------------\n"); if(novo == NULL) printf("\n --> ERRO: Nao ha passageiros na memoria, importe uma lista ou adicione novos passageiros.\n"); for(novo=l; novo!=NULL; novo=novo->prox){ printf("Nome: %s %s \t| RG: %d\n", novo->nome, novo->sobrenome, novo->RG); } printf("\n"); system("pause"); } Lista *insere (Lista *l){ printf("\n-------------------ADICIONANDO PASSAGEIROS--------------------\n"); printf("\nPRESSIONE ENTER PARA COMECAR\n"); char inome[20]; char isobrenome[20]; int iRG; printf("\nNOME: "); scanf("%s", inome); printf("\nSOBRENOME: "); scanf("%s", isobrenome); printf("\nRG: "); scanf("%d", &iRG); Lista *novo = (Lista*) malloc(sizeof(Lista)); novo->prox = l; novo->RG = iRG; strcpy(novo->nome, inome); strcpy(novo->sobrenome, isobrenome); printf("\nPASSAGEIRO ADICIONADO COM SUCESSO!\n"); system("pause"); return novo; } Lista *insereTxt (Lista *l, char line[]){ Lista *novo = NULL; int iRG; char itemp_nome[20]; char itemp_sobrenome[20]; sscanf(line, "%s %s %d", itemp_nome, itemp_sobrenome, &iRG); novo = (Lista*) malloc(sizeof(Lista)); novo->prox = l; novo->RG = iRG; strcpy(novo->nome, itemp_nome); strcpy(novo->sobrenome, itemp_sobrenome); return novo; } void criaTxt(Lista *l){ Lista *p = l; printf("\n------------------------SALVANDO VOO-------------------------\n"); printf("\n --> ANTENCAO: Essa alteracao ira sobrescrever o arquivo anterior.\n"); printf("\n --> Pressione ENTER para aplicar ou QUALQUER OUTRA TECLA para recusar.\n"); if(getch()==13){ if(p != NULL){ FILE *voo; voo= fopen("voo.txt", "w"); for (p = l; p != NULL; p = p->prox){ char temp_nome[20]; char temp_sobrenome[20]; int temp_RG; strcpy(temp_nome, p->nome); strcpy(temp_sobrenome, p->sobrenome); temp_RG=p->RG; fprintf(voo, "%s %s %d\n", temp_nome, temp_sobrenome, temp_RG); } fclose(voo); } else printf("\n --> ERRO: Nao foi feita nenhuma alteracao, nao foi possivel salvar o arquivo.\n\n"); } system("pause"); } Lista *busca(Lista *l){ Lista *p; int bRG; printf("Digite o RG a ser buscado: "); scanf("%d", &bRG); for (p=l; p !=NULL; p=p->prox){ if (bRG == p->RG){ printf("Passageiro encontrado. %d\n"); system("pause"); return p; } else{ printf("Passageiro nao encontrado.\n"); // não achou o elemento system("pause"); return NULL; } } } Lista *retira (Lista *l) { Lista* ant = NULL; /* ponteiro para elemento anterior */ Lista* p = l; /* ponteiro para percorrer a lista*/ int rRG; printf("\n --> Digite o RG do passageiro a ser removido: \n"); scanf("%d", &rRG); /* procura elemento na lista, guardando anterior */ while (p != NULL && p->RG != rRG) { ant = p; p = p->prox; } /* verifica se achou elemento */ if (p == NULL){ system("pause"); return l; /* não achou: retorna lista original */ } /* retira elemento */ if (ant == NULL) { /* retira elemento do inicio */ l = p->prox; } else { /* retira elemento do meio da lista */ ant->prox = p->prox; } free(p); system("pause"); return l; } Lista *libera(Lista *l){ Lista *p = l; while (p != NULL) { Lista *t = p->prox; // guarda referência para o próximo elemento free(p); //libera a memória apontada por p p = t; // faz p apontar para o próximo } return p; } /*void vazia (Lista *l){ printf("\nStatus da lista: "); if (l == NULL) printf("Vazia\n"); else printf("Cheia\n"); }*/ O que você acha? Agora estou com mais um problema, preciso listar minhas "tabelas" .txt, escolher uma e abri-la... Não sei como posso fazer isso.
  2. Tenho uma estrutura com N campos e uma tabela com N linhas e N campos. Preciso usar a técnica de lista encadeada para armazenar cada linha da tabela em um nó da estrutura. Porém não consigo fazer isso, uso um loop para ler linha por linha e armazenar em cada nó, porém quando o loop termina, a função retorna apenas o último nó. Acredito que seja essa a questão, porém não tenho nenhuma ideia de como proceder. Grato! Lista *insereTxt (Lista *l){ FILE *voo; char line[50]; Lista *novo = NULL; voo = fopen("voo.txt","r"); while(fgets(line, 50, voo) != NULL){ int iRG; char itemp_nome[20]; char itemp_sobrenome[20]; sscanf(line, "%s %s %d", itemp_nome, itemp_sobrenome, &iRG); novo = (Lista*) malloc(sizeof(Lista)); novo->prox = l; novo->RG = iRG; strcpy(novo->nome, itemp_nome); strcpy(novo->sobrenome, itemp_sobrenome); //printf("Nome: %s %s \t| RG: %d\n", novo->nome, novo->sobrenome, iRG); } fclose(voo); if (novo != NULL){ printf("\n --> LISTA IMPORTADA COM SUCESSO!\n\n"); system("pause"); return novo; } else{ printf("\nERRO: Falha ao importar a lista\n"); system("pause"); return NULL; } }
  3. Obrigado pela resposta! testei os códigos porém surgiram erros. 1>------ Build started: Project: Hora, Configuration: Debug Win32 ------ 1>Compiling... 1>HoraCode.cpp 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(22) : error C2057: expected constant expression 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(22) : error C2466: cannot allocate an array of constant size 0 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(22) : error C2133: 'output' : unknown size 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(23) : warning C4018: '<' : signed/unsigned mismatch 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : error C2070: 'char []': illegal sizeof operand 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : error C2117: 'command' : array bounds overflow 1> c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : see declaration of 'command' 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : error C2117: 'command' : array bounds overflow 1> c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : see declaration of 'command' 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(26) : error C2078: too many initializers 1>c:\users\william\desktop\hora\hora\hora\horacode.cpp(28) : error C2070: 'char []': illegal sizeof operand 1>Build log was saved at "file://c:\Users\William\Desktop\Hora\Hora\Hora\Debug\BuildLog.htm" 1>Hora - 8 error(s), 1 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Vou precisar tirar um tempo ai para estudar mais a linguagem, pelo que vi tem bastante coisa pra ver.
  4. Olá, estou criando um programinha console simples onde eu possa definir uma hora para o PC desligar. Minha dúvida é: Como colocar o resultado de " "\nSegundos : " << (((hora*60)+minuto)*60); " dentro de "system("shutdown -s -t "XX" "); " no lugar dessas duas letras X. sou super novato em linguagem de programação, e até agora não achei nenhuma explicação clara. Obrigado! #include <iostream> using namespace std; int main() { int hora=0; int minuto=0; cout << "Digite a hora: "; cin >> hora; cout << "digite um minuto: "; cin >> minuto; cout << "\nHora: " << hora << "\nMinuto: " << ((hora*60)+minuto) << "\nSegundos : " << (((hora*60)+minuto)*60); cout << "\n"; system("shutdown -s -t "XX" "); system("pause"); return 0; }
  5. Até o final do dia eu retorno com resultados, obrigado a todos!
  6. Uso o Windows 10, não faço fragmentação de disco, uso SSD e li que aqui não é necessário, uso o MSI Afterburner para verificar o comportamento do pc nos jogos e mantenho a máquina sempre limpa. adicionado 1 minuto depois Irei atualizar os drivers de vídeo, porém estou roteando a internet do celular no pc por problemas com a vivo, aí complica. Hoje não é o meu dia kk
  7. aconteceu do nada e permaneceu, eu reinicio ele e continua esse problema. Obs. Notei que no jogo o uso da placa de vídeo está em 100% porém a frequência da memória está muito reduzida
  8. Olá, hoje meu computador amanheceu com o desemprenho péssimo em jogos, fui dar início na minha jogatina matinal e ele iniciou os jogos normais, porém do nada os frames caíram tornando impossível jogar. Verifiquei a placa de vídeo, memorias etc, porém nem imagino o que possa estar me causando isso. Intel Core I5 3450 Asus p8h61 EVGA GeForce GTS 450 2x4Gb kingston

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!