Ir ao conteúdo
  • Cadastre-se

daniel.oliveira

Membro Pleno
  • Posts

    27
  • Cadastrado em

  • Última visita

Tudo que daniel.oliveira postou

  1. Na verda é ao contrário ao alocar memória ele te retorna um endereço na memória pronta pra usar no programa, faria mais sentido: fastCar = &c;
  2. main(){ struct FastCar *fastCar; //inicia fastCar que aponta aleatoriamente ... if(x == 1){ Cadastro(&fastCar); //chama função Cadastro ... void Cadastro(struct FastCar **fastCar){ // ponteiro pra ponteiro? struct FastCar *c; //inicia c que aponta aleatoriamente c = (struct FastCar*)malloc(sizeof(struct FastCar)); //c aponta para memória inicializada c = &fastCar[0]; // c aponta para o que fastCar está apontando - aleatoriamente por que você declarou em main
  3. Eu dei uma breve olhada no seu código e vi que tem erros básico de operação com ponteiros e alocação de memória. Na função de cadastrar você aloca uma memória e endereça para o ponteiro c e na próxima linha você endereça a struct parametro para c (ou seja você perde a alocação que você fez), além de endereçar uma varável que nem foi iniciada em main. Eu sugiro estudar novamente sobre operações de ponteiros e struct.
  4. Isso mesmo, depois de programar vários programas você pega o jeito de como digitar literalmente os tipos de dados em C.
  5. Vamos a lógica Se a>b , então: a-b Se a<b, então: a+b Senão (se não maior, nem menor é igual), então a*a, ou a*b, tanto faz. você pode testar em C if (a>b){ //printa a-b } else if (a<b){ //printa a+b } else { //printa a*b } Para mostrar você não precisa gravar numa variavel só se você for utilizar depois printf("A diferença entre a e b, %d - %d = %d", a, b, a-b);
  6. A biblioteca padrão de entrada e saída de arquivo permite que você leia e escreva arquivos e, porém você tem que ter um pouco de conhecimento sobre ponteiros, e as funções de leitura e escrita, tais como FILE *arquivo, fopen(), fscanf(), fprintf()., etc... Bom você pode pesquisar leitura e e escrita de arquivos em C no Google, montar um código e se precisar de ajuda voltar a nos perguntar.
  7. O último Else está codificado errado, você pode colocar um Else If com a condição maior que 25 como você fez tirando os dois pontos depois da comparação. Agora você pode também só colocar Else, já que o IMC não é menor que 18,0, e não é menor que 25,0 só pode ser maior do 25,0. Só colocar Else e o código a ser executado.
  8. Eu não queria causar polêmica, mas programação é isso mesmo existe diversas formas de resolver um determinado problema, e todas alternativas estão certa. Mas sempre penso em reutilização de código e professores ensinam isso, por exemplo ao setar um valor como limite, você ao usar seu programa para números maiores terá que reescrever a linha de código para suportar tal limite, isso é simples em um programa de 100 linhas de código, agora imagine ter 50 mil linhas? Os criadores de C fizeram uma biblioteca padrão de limites até porque o limite de um int varia de computador para computador, de sistema para sistema. Então eu formulei minha resposta sendo que solucionando a questão assim eu não precisarei de mudar meu algoritmo futuramente, ele rodará até sei lá num computador pré histórico onde o valor máximo de um int seja maior que 99999.
  9. E se alguém digitar um numero maior? já que o programa não testa, o primeiro valor é o menor e contador começa com um. você digita um valor e logo ele é o maior, menor e média, matemática básica.
  10. É simples resolver esse questão, o primeiro número digitado é o menor número, faça antes do loop. Depois dentro do loop você terá duas situações ao ler um valor: O valor será igual a ao menor número, incremente contador++. Valor será menor ao menor número, ou seja temos um novo menor número, contador = 1. Implemente esse algoritmo e poste os resultados obtidos.
  11. Editores de texto em geral não ocupam muito espaço, o que ocupa é se for uma IDE já que o mesmo pode possuir compiladores, builders, ferramentas de depuração, ambiente de design de um, etc. Um ótimo editor que uso é o sublime.
  12. @isrnick Verdade foi um erro meu já que strings em C são ponteiros eu pensei que como eles são alocados dinamicamente faria alguma diferença na memória. Mas fgets() não dá nem a mínima pra isso e pede um vetor de caracteres fixo alocando memória desnecessária.
  13. @isrnick Eu acho sua solução muito boa e limpa, é o que eu faria, mas para facilitar o alto consumo de memória a busca só precisaria guardar o nome é CPF em primeira vez e se o CPF for igual aí sim guardar os demais dados do cadastro isso economizaria mais memória, no caso que eu apresentei o programa não gravaria nada e quando achasse o CPF voltaria uma linha e aí ele faria o que bem entender já que estaria no começo do cadastro economizando mais memória. A questão de como formatar os dados é decisão do programador bem como escolher que tipo de dados usar. Para iniciantes eu aconselho trabalhar com arquivo binários, mas isso é outra história.
  14. Então geralmente quando você executa um programa para prompt de comando ele fechará antes mesmo de mostra os resultados finais, o certo é abrir o programa a partir do prompt do windows, ou terminal no linux e aí ele se comporta normalmente. um exemplo de como abrir no terminal do windows
  15. existe uma função chamada fgetpos e fsetpos ela te ajuda a ir a uma posição específica em uma arquivo, o correto é você setar uma posição antes de chamar fgets já que ele avança uma linha inteira por vez, depois é só usar fsetpos e você voltará na posição desejada no caso uma linha anterior a do cpf e colocar numa string tudo que vier após o ": " ou '#'. Meu diagrama de exemplo FILE *txtFile; fpos_t p; //posição para ser gravada //Funções para abertura de arquivos... fgetpos (txtFile, &position); //grava a posição da linha em negrito Nome: Marcos Belino CPF: 123.456.789-10 Data de Nascimento: 123456 Numero Do Cliente: #8 sua_funcao_de_pesquisa() //retorna falso já que não há nenhum CPF fgets pula a linha então estará assim a seu arquivo: Nome: Marcos Belino CPF: 123.456.789-10 Data de Nascimento: 123456 Numero Do Cliente: #8 sua_funcao_de_pesquisa() //retorna verdadeiro se o CPF estiver correto Então você volta para a linha anterior fsetpos (txtFile, &p); E ficará ssim novamente e aí é só retirar toda a string após ": " ou '#' Nome: Marcos Belino CPF: 123.456.789-10 Data de Nascimento: 123456 Numero Do Cliente: #8 claro que são só dicas, mas esclarece bastante coisa se estiver com dúvidas é só perguntar.
  16. @Boko Moko Isso mesmo, sabemos que temos funções em C de leitura de arquivo usam dois tipos de caracteres de demarcação " " e "\n" então a questão está em como você formata seus dados no arquivo TXT. Mais tarde eu procuro exemplos práticos.
  17. Como está o cadastro do cliente no arquivo de texto? A forma de como você colocou vai deixar mais claro como te ajudar.
  18. Como sua professora pediu para ler um número negativo e você pode um usar um if para não ocorrer uma entrada de número negativo indevido if(n < 0) { printf("Entrada de número negativo indevido!\n"); return; //Encerra programa }
  19. seu pseudocódigo é: se (numFaltas >= 0 E numFaltas <= 8) aprovado senão se (numFaltas > 8 E numFaltas <=18 ) reprovado senão mensagem de erro Agora é só transformar em C... usa-se if para testar uma condição if(condição) se você quiser testar duas condições e as duas tem que estarem corretas use && if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!); pode usar também o else para o caso de a condição testada seja falsa if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!); else printf("Seja bem vindo!"); você pode usar o else com if para testar uma nova condição caso a condição anterior seja falsa if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!); else if (eVIP == true) printf("Seja bem vindo sr. %s", nome); else printf("Seja bem vindo!");
  20. Olá Vilson seu programa roda pela linha de comando então eu sugiro abrir o prompt: windows+r, digite cmd.exe depois você vai ao diretorio do programa(com o comando cd) e o executa digitando o nome no prompt e dando enter.
  21. Só corrigindo seu programa foi escrito em C e não C++.
  22. Eu só queria demonstrar que tais trechos de código você pode transformar em função para além de dividir a tarefa de contruir um programa lhe dará a vantagem de reutilizar o código uma vez criada a função você poderá modificá-la sem alterar o resto do programa.
  23. Tente armazenar os tipos de dados na forma primitiva individualmente int ou char* no arquivo e dará certo.
  24. você pode criar uma função que compara dois array de caracter e retorne 0 se forem iguas(bem parecida com strcmp que compara strings), seria mais ou menos assim: #include <stdio.h> #include <string.h> int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[]) { int tam = strlen(str); //compara caractere por caractere for(int i = 0; i < tam; i++) // se achar um caractere diferente retorna -1 if(str[i] != arrayChar[i]) return -1; // retorna 0 por serem iguais return 0; } Você então pode utilizar em um loop e sempre que você achar a primeira letra igual você chama a função exemplo: #include <stdio.h> #include <string.h> typedef char* string; // eu não lembrei qual blibbioteca linkar então definir aqui /** * Esta função compara uma string com um array de caracteres(char []) * retorna 0 se iguais ou -1 para diferentes */ int compStrCChar(string str, char arrayChar[]); int main(void) { string palavra = "teste"; string frase = "12teste12test12testeteste"; int qtPalavras = 0;// quantidade de palavras int tam = strlen(frase); //int comp; // armazena comparação // busca a palavra dentro da frase e então acrescenta 1 a qtPalavra for(int i = 0; i < tam; i++) { if(palavra[0] == frase[i]) { // se as palavras forem iguais ou seja igual compStrCChar a 0 //comp = compStrCChar(palavra, &frase[i]); if(compStrCChar(palavra, &frase[i]) == 0) // lembrando a string definida pelo usuario primeiro qtPalavras++; } } printf("%i\n", qtPalavras); } int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[]) { int tam = strlen(str); //compara caractere por caractere for(int i = 0; i < tam; i++) // se achar um caractere diferente retorna -1 if(str[i] != arrayChar[i]) return -1; // retorna 0 por serem iguais return 0; }

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!