Ir ao conteúdo

1freakday

Membro Pleno
  • Posts

    655
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. @Paulo Sérgio Oliveira Coutinho Montar é fácil, eu quero que você entenda como funciona... Segue o exemplo de cima: #include <stdio.h> int main(int argc, char *argv[]){ //verifica se foi recebido algum argumento if(argc > 1){ int i; //imprime os argumentos for(i = 1; i < argc; i++){ printf("Argumento: %d - Contem: %s\n",i, argv[i]);//argv[i] = argumentos } } return 0; } Para enviar argumentos, ou você abre pelo prompt ou pelo executar(WinKey + R).
  2. @FgD Se você quer alterar a taxa de todos modelos iguais para apenas uma taxa, você só precisa buscar o modelo e alterar a taxa: void alterarTaxas(){ FILE* carros; CARROS car; char modelo[15]; long pos; int taxa; carros = fopen("carros.txt", "r+"); if(carros == NULL){ printf("PROBLEMAS NA ABERTURA DO ARQUIVO 'CARROS'. POR FAVOR CONTATAR O RESPONSÁVEL PELO PROGRAMA!\n\n"); system("pause"); exit(0); }else{ char cnf = '\0'; printf("Digite o modelo do carro para alterar sua taxa: "); scanf(" %s", &modelo); printf("Digite o valor da nova taxa: "); scanf(" %d", &taxa); while(fread(&car, sizeof(CARROS), 1, carros) == 1){ if(strcmp(modelo, car.modelo) == 0){ printf("A taxa é %d da cor %s\nDeseja mudar para %d?(s/n)", car.taxa, car.cor,taxa); scanf(" %c",&cnf); car.taxa = ((cnf == 's') ? taxa:car.taxa); fwrite(&car, sizeof(CARROS), 1, carros); } } } fclose(carros); }
  3. @Maicon Prais Sim, nas variaveis de main adiciona algo parecido a isso: int contador_de_vinhos = 0; E na case de cadastrar vinhos: case ... cadastrar_vinho(p, contador_de_vinhos); contador_de_vinhos++; break ...
  4. Na função de cadastrar você colocou o código ao contrário, segue a ordem lógica: 0 - inicio da função - receba o ponteiro - cadastrar_vinho(struct VINHO *p) 1 - Declare as variáveis(nome, vinicola, cidade, etc) 2 - Recebe os dados - com scanf... 3 - Busque um indice no vetor a ser armazenado os dados. 4 - Armazene no arquivo - com fprintf 5 - fim da função adicionado 2 minutos depois Para buscar, você precisa receber o ponteiro da struct onde estão os dados: método: void buscar_vinho(struct VINHO *busc, int codigo) chamada: buscar_vinho(p, X);
  5. @JoseCicrano Acredito que o socket, packets, criptografia, etc., é um dos maiores obstáculos para criar o servidor. Entretanto existem várias bibliotecas não padrões por ai que poderiam facilitar muito, porém não recomendo, é sempre bom começar do 0, saber como as coisas funcionam( ou deixam de funcionar )
  6. @viniciosbarbosa Precisa apenas organizar a lógica de comparação nesse if: if(vet[i].ano>=vet[j].ano&&vet[i].dia>=vet[j].dia &&vet[i].mes>=vet[j].mes ){ temp=veto[i]; veto[i]=veto[j]; veto[j]=temp; } Supondo que temos selecionado dois índices: i = 0 e y = i+1; 1- Verifique se o ano i é menor que o ano[y]. - Se for menor: troque os dois. Resete o índice do loop ( i = 0 ) - Se não for menor, mas for igual: Etapa 2 2- Verifique se o mês i é menor que o mês [y]. - Se for menor: troque os dois. Resete o índice do loop ( i = 0 ) - Se não for menor, mas for igual: Etapa 3 3- Verifique se o dia i é menor que o dia[y]. - Se for menor: troque os dois. Resete o índice do loop ( i = 0 ) - Se não for menor, mas for igual, ai você decide como ficará.
  7. Nossa senhora, desculpe... Mas você acabou misturando as coisas, segue: Usuario* ordenalista(Usuario *x){ int i,j; char sNomeaux[61]; for(i=0;i<MAX;i++){ for(j=(i+1); j<MAX; j++){ if( strcmp(x[i].nome, x[j].nome) > 0 ){ strcpy(sNomeaux,x[i].nome); strcpy(x[i].nome,x[j].nome); strcpy(x[j].nome,sNomeaux); i=0; //reseta i para verificar de novo } } } return x; } void listarClientes(Usuario *x){ system("cls"); int i; ordenalista(x); printf("\n-------Lista de clientes--------\n\n"); for(i=0;i<MAX;i++){ if(x[i].ativo==1){ printf("\n\n--------Cliente [%d]------------\n",i+1); fflush(stdin); printf("\nNúmero da Conta: %s",x[i].nconta); printf("\nNome: %s\n",x[i].nome); printf("CPF: %s\n",x[i].cpf); printf("Telefone: %s\n",x[i].telefone); printf("Saldo: %f\n",x[i].saldo); printf("\n--------------------------------\n\n"); } } } void cadastro(Usuario* x){ system("cls"); float saldof=0.0; char conta[8]; char nome[61]; //Nome cliente char cpf[12]; //Cpf cliente char telefone[12]; //Telefone cliente int chec,i; do{ printf("Digite sua conta:\n"); gets(conta); fflush(stdin); printf("\nNome:\n"); gets(nome); while(strlen(nome) == 0){ printf("Digite alguma coisa, seu cabra...\n"); gets(nome); } printf("\nDigite o seu cpf:\n"); gets(cpf); while(strlen(cpf) == 0){ printf("Digite alguma coisa, seu cabra...\n"); gets(cpf); } printf("\nDigite seu CPF:\n"); gets(telefone); while(strlen(telefone) == 0){ printf("Digite alguma coisa, seu cabra...\n"); gets(telefone); } for(i=0; i<MAX; i++){ if(cliente[i].ativo==0){ getchar(); strcpy(x[i].nconta,conta); strcpy(x[i].nome,nome); strcpy(x[i].cpf,cpf); strcpy(x[i].telefone,telefone); x[i].ativo=1; x[i]->saldo= saldof; break; } } system("cls"); printf("Seu número da conta é: %s [ATENÇÃO: NÃO DEIXE DE ANOTAR]",conta); printf("\n\n\nCADASTRO REALIZADO COM SUCESSO...\n\n\n"); printf("Digite 1 para continuar a fazer mais cadastros.\nDigite 0 para voltar ao menu.\n"); scanf("%d",&chec); system("cls"); }while(chec!=0); }
  8. @Henrique N Mendes Ali na função strcmp, deve ser assim: ... int i,j; char sNomeaux[61]; for(i=0;i<MAX;i++){ for(j=(i+1); j<MAX; j++){ if( strcmp(x[i].nome, x[j].nome) > 0 ){ strcpy(sNomeaux,x[i].nome); strcpy(x[i].nome,x[j].nome); strcpy(x[j].nome,sNomeaux); i=0; //reseta i para verificar de novo } } } ... Testei aqui e funcionou:
  9. @Paulo Sérgio Oliveira Coutinho Na teoria a função main é composta por: int argc : Recebe a quantidade de argumentos recebidos char *argv[] : Recebe os argumentos como string's, então use atoi/atof para converter para inteiro/double e usar como nota. Para acessar os argumentos, basta acessar os índices de argv, lembrando que argv[0] é o nome do executável. Use: //verifica se foi recebido algum argumento if(argc > 1){ //imprime os argumentos for(int i = 1; i < argc; i++){ printf("Argumento: %d %s\n",i, argv[i]);//argv[i] = argumentos } } Então se você ir no cmd e executar o programa assim: > x.exe o argv[0] argumento é x.exe Com argumentos: > x.exe Nota1 Nota2 o argv[0] argumento é x.exe o argv[1] argumento é a string Nota1 o argv[2] argumento é a string Nota2
  10. Já tentou usar assim: for(i=0;i<MAX;i++){ for(j=(i+1); j<MAX; j++){ if( strcoll(x[i].nome, x[j].nome) < 0){ strcpy(sNomeAux,x[i].nome); strcpy(x[i].nome,x[j].nome); strcpy(x[j].nome,sNomeAux); i = 0; //reseta i para verificar de novo } ... ... ... Veja que o i é sempre um menor que j, então se a lista for assim: 1 - Joao 2 - Aria 3 - Pedro Aria e Joao são trocados, depois i volta para 1, e verifica com João e Pedro...
  11. case 1: stcliente(vclientes); system("cls"); break; Você usou a struct - stcliente - no lugar da função cadastro. -- Aqui também: char vclientes =0; Não use char, use int. Char é apenas para caracteres...Mesmo que tenham o mesmo valor numérico.
  12. @Johny Macedo Tente verificar qual a causa do cont ser igual a n, veja como ele é antes de entrar no if. Tente usar cont++, talvez seja melhor.
  13. Seria melhor postar como é salvado no arquivo. Mas pelo que entendi: 1- fseek(carros, 0, SEEK_SET); 2- pos = ftell(carros); 3- while(fread(&car, sizeof(CARROS), 1, carros) == 1){ 4- if(strcmp(modelo, car.modelo) == 0){ 5- car.taxa = taxa; 6- fseek(carros, pos, SEEK_SET); 7- fwrite(&car, sizeof(CARROS), 1, carros); 8- } 9- pos = ftell(carros); 10- } Depois da linha 7 tente usar continue, ou pule 2 linhas.
  14. Eu usei os termos back-end e front-end, apenas como um trocadilho, para servidor e cliente. Quando digo cliente, é o jogo que o usuário baixa e executa. Então você precisa trabalhar o servidor, para automatizar todos setores relacionados a conexão com o cliente, geralmente os servidores de jogos são resumidos em 3 executáveis: = LoginServer = Responsável pelo login e cadastro de logins. Lida direto com bando de dados e está ligado ao Char Server, para autenticação de login. <No socket usa packets apenas de logar,registrar e recuperar conta> = CharServer = Responsável pela criação de personagens. Envia autenticação ao MapServer. <No socket usa packets apenas de criar,deletar char,desconectar> = MapServer = Responsável pelo controle de: mapas, npcs, personagens, e a lógica dos npcs. É preciso tomar muito cuidado com esse já que pode ser muito vulnerável a duplicação de itens e packets. Por isso é preciso usar criptografia. <No socket usa packets variados, para npcs, mapas, gms, adms, controle, etc> Após trabalhar no server e saber como será feito toda comunicação com o cliente, comece a trabalhar no cliente, e toda sua formação. Desde o socket até a parte gráfica. P.S: nesse momento, não vai pensando que você vai começar a criar items, mapas, npcs, etc., só no final do jogo ou quando tiver uma base para tal, você começara a criar os gráficos. Planejamento e foco é tudo.
  15. Tudo certo, Se quiser pode colocar em um header sim. Basta chamar: bsCodigo(X, "blocos.txt");
  16. @EduardoSch Veja, você tem que ler o arquivo da mesma forma que foi salva, assim é possível usar o fscanf e verificar rapidamente se o quarto já está ocupado, de uma lida sobre fscanf. Uma dica, já que você salva o checkin assim no arquivo: //Salvamento - tente não usar pontos fprintf(Entrada,"Codigo: %d.\n", Dados[I].CodigoCliente,"aw"); fprintf(Entrada,"Nome do Titular: %s.\n", Dados[I].Titular,"aw"); fprintf(Entrada,"Telefone: %d.\n", Dados[I].Telefone,"aw"); fprintf(Entrada,"Quarto: %d.\n", Dados[I].NumeroQuarto, "aw"); fprintf(Entrada,"Numero de acompanhantes: %d.\n", Dados[I].Acompanhantes,"aw"); fprintf(Entrada,"%d dia(s).\n\n", Dados[I].TempoEstadia,"aw"); fprintf(Entrada," ** \n\n", "aw"); //Output's 1- Codigo: X 2- Nome do Titular: XXXX 3- Telefone: XXXX-XXXX 4- Quarto: XXX 5- Numero de acompanhantes: X 6- X dia(s). 7- ** 8- 9- Codigo: X Observe acima, depois da linha 2, apenas a linha 9 terá outro código, então você pode usar um contador mais o while, até encontrar o próximo código, exemplo: #define separador 7 //contagem de linhas que separa os codigos bool bsCodigo(int codigo, const char *nomeArquivo){ //;; var temporarias char buffer[500]; int cdgtmp = 0; int linhaAtual = 1; int proxLinha = 1; FILE *arquivo = fopen(nomeArquivo, "r"); if(arquivo != NULL){ //;; achar código no arquivo até EOF while(!feof(arquivo)){ //;; Se linhaAtual for a linha prevista, Código: if(linhaAtual == proxLinha){ fscanf(arquivo,"%s %d", buffer, &cdgtmp); if(codigo == cdgtmp){ //;; código encontrado fclose(arquivo); return true; } proxLinha += separador; } linhaAtual++; } fclose(arquivo); } //;; código não encontrado return false; }
  17. @HebertCL Não sei se você entendeu o conceito da chamada das funções, pois quando você usa setprecision(), ao usar o output, seja com cout, será acrescentado as casas decimais. Mas isso não acontece com todo o programa, apenas com as chamadas ao cout depois de alterar a precision. Apenas altere novamente para a precision que você quer ter.
  18. Tem o ODBC, segue um tutorial:http://www.dei.isep.ipp.pt/~tmatos/ADAV/2002_2003/Tutorial ODBC & MFC.pdf Ou SQLite: https://sqlite.org/cintro.html Download SQLite: https://sqlite.org/download.html
  19. @JoseCicrano Allegro é uma biblioteca gráfica não padrão, ela não está relacionada com banco de dados. Para usar banco de dados em C++, basta usar uma biblioteca externa(tem várias) para conectar/inserir/alterar/etc no banco de dados. Então, primeiro Allegro é a biblioteca que irá mostrar o gráfico do cliente, como mapas, a janela do cliente, personagem, etc... Mas você pode escolher outras, como unity2d, SDL, SFML, etc...Prefiro SDL.
  20. @LRock98 Você precisa receber e armazenar os anos em um vetor de int, depois basta verificar os anos bissextos em um loop. Se for conveniente use um vetor auxiliar para armazenar os bissextos.
  21. @JoseCicrano É possível fazer em C++ sim, mas para um projeto para MMOSG precisa de muito planejamento, uma pessoa só levaria anos e anos para terminar. A não ser que você tornasse público o projeto e outros programadores poderiam dar uma cooperada. Allegro é uma ótima escolha, mas antes de escolher, estude todos setores do jogo e veja se o Allegro irá suportar todos. Segue um jogo 2d de 2005 inspirado em Ragnarok e Open Source: https://github.com/themanaworld Lembrando que no jogo é preciso criar a parte back-end do server assim como o front-end, o client. Aconselho a usar SQL para Banco de Dados, muitos jogos já mudaram para o SQL e é mais seguro e amplo. Ac...
  22. @mosiah santos Segue a lógica: 1) Você precisa ter o valor. Feito. 2) Verificar a quantia de desconto com o if. Feito. 3) Calcular desconto... Aqui basta determinar o valor do desconto, já que você sabe a porcentagem. Se fosse 5%: 1 - int desconto = 5; 2 - desconto /= 100; //fica 0,05 3 - desconto *= valor; //0,05 * valor 4 - valor -= desconto; //valor final com desconto Basta adicionar as variáveis desconto na função. E colocar as linhas 2,3 e 4 dentro dos dois ifs: if (valor > 200 && valor < 1000){} else if(valor > 1000){}
  23. @mosiah santos Você precisa subtrair o valor pelo desconto dado. Então é preciso calcular o desconto sobre o valor nos if's, depois alterar a variável valor subtraindo pelo desconto.
  24. @carlos20030 Não use int r dentro do escopo do código, use como parâmetro para chamada. Apenas envie os valores na chamada. Exemplo: int recursivo(int r){ if(r > 1){ if(r % 2 == 0){ r = recursivo(r / 2); } else if(r % 2 > 0){ r = recursivo(r - 15); } else if(r % 7 == 0){ r = recursivo(r - 5); } } return r; } int main(){ int r = 45, saida = 0; saida = recursivo(r); printf("Entrada: %d Saida: %d\n",r,saida); return 0; }
  25. @Bianca Lima Se não me engano, as iterações são os 'ciclos' dos loops, então quando você usa: while(i < MAX){ i++; } i seria o contador de iterações até o condicional finalizar o loop. Vendo seu código, basta imprimir o i nas funções, antes de retornar para main.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!