Ir ao conteúdo
  • Cadastre-se

William Dias

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Reputação

1
  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...