-
Posts
655 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que 1freakday postou
-
Boa noite, para ler uma linha, use um vetor alocado, seja declarado com malloc ou manualmente, sendo que você não fez a seguir: char *linha[500]; fgets(linha[contador],500, arq_entrada) != NULL; Você usou uma matriz de string, sendo que a matriz foi alocada com 500 linhas, mas a quantidade de letras para cada linha não foi definida, sendo feito do seguinte modo: char linha[500][100]; //linhaxletras ou char *linha[500]; linha[x] = (char *)malloc(sizeof(char)*TAM_MAX_LETRAS)); no fgets, pode deixar como está: fgets(linha[contador],500, arq_entrada)
-
@vangodp Não percebi kk :s Eu dei um tempo nas redes sociais, mas logo vou voltar a me comunicar com o pessoal, quando as coisas ficarem melhores.
-
@jpaulofsa Perdão, erro meu, como o peso é usado com o tipo float, você usa %f, assim: float peso; scanf("%f", &peso); Se quiser limitar as casas na imagem, use: printf("%.2f",peso);
-
Boa noite, geralmente eu sempre coloco muito conceito nas minhas respostas, dessa vez vou ser direto, então segue: 1 erro: usar char no local de int char planeta; scanf("%c", &planeta); o correto: int planeta; scanf("%d",&planeta) 2 erro: erro de sintaxe scanf("%/d", peso); o correto: scanf("%d", &peso); 3 erro: usar character no switch case No momento que usar switch(), poderá usar apenas tipos com valores numéricos ou caracteres, e isso esta intimamente ligado aos cases. Seu erro foi usar um tipo char(planeta) e colocar os cases com int(1,2,3,4), o certo: com char planeta: switch(planeta){ case '1': ... } com int planeta: switch(planeta){ case 1: ... } 4 erro: usar == no lugar de = O simbolo == representa igualdade no conceito de possibilidade. Já o simbolo de = significa a mudança de valor de um tipo. Use = para dar valores, e == para condições. Então troque: peso == peso * 0,059; para peso = peso * 0,059;
-
Muito bom, tenho certeza que irá ajudar muita gente. Poderia alterar os codes para C/C++?
-
@Karpov1 Então existe varias formas de usar o .h(header), isso vai depender muito da funcionalidade do programa e também da necessidade de apenas declarar funções(sem ou com código). Porém se você decidir colocar o escopo das funções no header não tem problema nenhum, só que como é apenas um cabeçalho, ao usar códigos nele, pode atrapalhar o entendimento do header. Salvo os casos de função virtual, tal qual, sempre precisa ser igual a 0 ou usado {} P.S: Existe uma certa diferença entre incluir um .h e incluir um .hpp, geralmente arquivos de C++ usam .cpp/.hpp e arquivos de C usa .c/.h
-
Bom dia, você precisa compreender como usar os tipos na função scanf. Quando você quer um caracter use %c como: char operador; scanf("%c",operador); O seus if's não estão funcionais, pois você não comparou o operador recebido com o necessário, sendo o correto: if(operador == '*') else if (operador == '+') ... E também compreenda que você pode facilitar seu código usando switch case, pois seus if's podem ocupar muitas linhas.
-
@Osadrac Então, esse hexadecimal ai esta criptografado, pois ao traduzir: pM{,�+X#�����E@�i@q�;��rQ����� "u���'�4�(P���&�����a�==�����������H� Portanto não tem dados visiveis para ser capturados.
-
Eu poderia ajudar, mas como parte das regras do fórum é necessário que você mostre seu código, o erro e qual o problema.
-
Para abrir arquivos .h você precisa clicar com o botão direito e ir em Abrir com, ai você seleciona o codeblocks. O arquivo .cbp é um CodeBlocks Project, ou seja, um arquivo próprio de um projeto feito no codeblocks, no seu caso ele deveria abrir, se não abrir, clica com botão direito e vai em propriedades e mude o programa que abre ele. Caso não funcionar, tente abrir os arquivos pelo CodeBlocks, em Arquivo > Abrir
-
Um packet hexadecimal nada mais é que valores convertidos de plain text(seria texto comum, como esse) para hex, portanto para converter hex em byte, primeiro converta para plain text, depois organize os dados ai você coloca as informações importantes e necessárias em BYTE. Caso queira converter em hex para byte para usar nesse código ai em cima, lembre-se, um packet pode ter varias formas de montagem, e isso é você quem faz, entretanto, BYTE é usado apenas para números de 0 a 255. Então os outros dados necessários você deixa em string ou hexadecimal mesmo. Pois é o servidor que deve receber tais dados e organiza-los de forma coerente. Uma dica é sempre manter um modelo de packet padrão, depois só implemente como novos tipos dados serão enviados. Assim, você não precisa ficar modificando o sistema inteiro do servidor e do cliente. adicionado 9 minutos depois Resumindo, byte é usado apenas para números de 0 a 255, portanto você só usa um dado do hex para byte se for um numero necessário. Então após converter o código hexadecimal para texto e organizar os valores numéricos para byte, ai você pode enviar pela função do código acima. Caso você ache que o byte é um numero especial, codificado, saiba que ele é qualquer numero.
-
Boa noite, então esse código é bem simples de se entender, veja que a função é apenas para enviar para o server qual NPC foi clicado, o id pra ser mais exato. No escopo da função, tem apenas uma classe(Player) com as funções: ByteWrite e SendPacket Na função ByteWrite é montado o Packet, tal qual é identifado assim: Player.ByteWrite(int *, byte *);//Função para montar o packet new IntPtr(7875792)//Esse eu não sei dizer a necessiade, mas cria uma instancia IntPtr new byte[14]// Byte é equivalente a int - de 0 a 255 Inteiro de 8 bits sem sinal (microsoft) { (byte) 20, // o id do packet (byte) 0, // nulo (byte) 0, // nulo (byte) 0, // nulo (byte) 139,// dado (byte) 2, // dado Player.ClientID[0], // id do jogador Player.ClientID[1], // id do jogador (byte) 0, // nulo (byte) 0, // nulo (byte) 0, // nulo (byte) 0, // nulo Player.IntToArrayByte(NPCID)[0], // id do npc Player.IntToArrayByte(NPCID)[1] // id do npc }); Logo na função SendPacket é usado o id do packet(20) usado em ByteWrite, o primeiro byte, e finalmente é enviado para o socket do servidor.
-
Ola, você esta tentando dar free no tipo e não no objeto, tente free(x); ou free(&x); Você só usa malloc(sizeof(Ret)); para um ponteiro, como Ret *x = (Ret *)malloc(sizeof(Ret));
-
Acredito que seja um erro de alocação de memória, se você inicializar uma matriz com 5 endereços, e tentar acessar o 6 vai dar um erro, por exemplo: grafo teste(5); teste.setGrafo(6,5); // superior a 25 - erro Porém testei seu código, e não vi nenhum erro, dei até uma testada em apenas um arquivo, segue: #include <iostream> using namespace std; class grafo { private: int tam; // tamanho da matriz int *mat = new int[tam*tam]; //Matriz para o grafo. public: grafo(int x); void getGrafo(); void setGrafo(int, int); }; grafo::grafo(int x) : tam(x) { for (int i=0; i < x;i++){ for(int j=0; j < x; j++){ mat[i * j] = 0; // inicializando a matriz com tudo zerado. } } } void grafo::getGrafo (){ for (int i=0; i < tam;i++){ for(int j=0; j < tam; j++){ cout << mat[i * j] ; // Imprimindo a matriz. } cout<< endl; } } void grafo::setGrafo(int x, int y){ mat [x*y] = 1;// inverter os valores não faz diferença } int main(){ grafo teste(5); teste.getGrafo(); cout << endl; teste.setGrafo(6,5); teste.getGrafo(); }
-
@Benjamin Breeg Usando as perguntas fora de case também diminuiria um pouco o código...
-
Caso o long long int não funcione, você pode usar unsigned, tal qual vai de 0 a 18 446 744 073 709 551 615, ou retire o int após long long, pois é opcional.
-
https://www.vivaolinux.com.br/artigo/Virus-de-computador-e-criacao-de-um-virus-em-C-C++-(parte-1-basico)?pagina=3
-
Como a função system requer uma string como comando, seria: system("clear"); (linux) system("cls"); (windows)
-
C Exercício Básico - Problema com formatação de saída
1freakday respondeu ao tópico de Adriano Mendonça em C/C#/C++
Boa noite, acredito que o único problema é a formatação, se for observar no exemplo, ele primeiro imprimi as colunas superiores(titulos) e depois as colunas inferiores(valores). No seu código, você imprimiu tudo na mesma linha, deixando a tela com menos espaço. A resolução seria dar printf nos titulos, ficando: printf("\n\n\tNOME\tETAPA1\tETAPA2..."); E depois dar printf nos valores: printf("\n%s\t%d\t%d...",nome, n1,n2,...); P.s: os valores são do tipo float -
Pois é, eu não tinha compreendido muito bem, pensei que queria uma forma de memorizar os arquivos e depois abrir a partir de um padrão, mas se quiser abrir os arquivos sem saber nome nem nada, ainda existe uma forma: Exemplo meu: //Open source ;) #include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <string.h> void abrir(const char *pasta, const char *arquivo){ if(arquivo != NULL){ //monta caminho char arq[100]; sprintf(arq, "%s/%s",pasta,arquivo); //abrir FILE *f = fopen(arq, "r"); //se arquivo existe if(f != NULL){ char le[100]; printf("\n\n"); while(!feof(f)){ if(fgets(le,100,f)) printf("%s\n",le); } fclose(f); } } } void listar(const char *PASTA){ DIR *dir; struct dirent *lsdir; dir = opendir(PASTA); while ( ( lsdir = readdir(dir) ) != NULL ) { //verifica extensao .txt if(lsdir->d_name[strlen(lsdir->d_name)-3] == 't' && lsdir->d_name[strlen(lsdir->d_name)-2] == 'x' && lsdir->d_name[strlen(lsdir->d_name)-1] == 't'){ //abre o arquivo abrir(PASTA,lsdir->d_name); } } closedir(dir); } //Supondo que a pasta ja exista main() { char pasta[100]; printf("Digite o nome da pasta: "); scanf("%s",pasta); listar(pasta); return 0; } é só digitar o nome da pasta que a função listar, por razões obvias, lista os arquivos nessa pasta e depois encontra os que são .txt, e enfim envia para função abrir. P.S: se uma pasta se chamar blabla.txt ela sera aberta e vai dar um erro, então tente mantar apenas arquivos com o nome e extensão .txt
-
Quando uma função requer um argumento Uint32, significa que pode ser NULL, ou vários argumentos, separador por |, no seu caso você separou os argumentos com virgula dando a entender que eram outros argumentos usados pela chamada, só que o erro informou ser muitos argumentos... traduzindo fica fácil perceber... Exemplo: SDL_CreateWindow(titulo,x,y,w,h, a|a2|a3|a4); Correção: SDL_CreateWindow("titulo da janela", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE);
-
Bom dia, você esta usando corretamente os pinos 2(RA0) e 30(RD7), talvez não estejam sendo alimentados corretamente. Inicie as portas como 0, assim evita que elas fiquem aleatórias. Acredito que o tópico: https://www.clubedohardware.com.br/forums/forum/217-programação-de-microcontroladores/ Ira lhe ajudar mais...
-
Bom dia, você não precisa usar int indice(...) dentro da função main, ja que ela sera usada na chamada dentro do escopo de main(), tente assim: #include <stdio.h> #include <stdlib.h> int indice(int indi){ int limite = 100; FILE *f = NULL; char arquivo[20]; indi = (indi > limite ? 0 : indi); for(; indi < limite; indi++){ //monta caminho do arquivo sprintf(arquivo, "xxx\\estoque_%d0004s.txt",indi); //se arquivo existe if((f = fopen(arquivo, "r") != NULL)){ char le[100]; fread(le,1,100,f); printf("%s",le); fclose(f); break; } } return indi; } //Supondo que xxx\\estoque_10004s.txt ja exista main() { int i; printf("Digite um indice: "); scanf("%d",&i); i = indice(1); return 0; } Algo que eu percebi, é que ou ele busca todos índices ou ele vai direto no indicado no parâmetro da chamada indi, portanto se remover o for(indi;), ele não irá procurar outro índice, caso o indicado na chamada não exista, então se remover o for não precisa de return e a função pode ser void
-
@michelBrito O calculo é simples: d = tempo de resposta x 340m/s (Velocidade do Som) 2(ida e volta) E você precisa entender o código escrito, pois pode ser que a pessoa que escreveu poderia estar usando mais de um sensor, ou o código estava errado. Peço que veja se você esta usando 2 sensores, caso contrário remova o for(int i = 0; i < SENSOR_NUM ) em void loop() E observe que está sendo usado dois sensores, e configurados com o Echo e o Trigger sem fundamento: NewPing(8, 9, MAX_DISTANCE), NewPing(10, 11, MAX_DISTANCE) Deveria ser: NewPing(12, 13, MAX_DISTANCE) 12 -> Pino do Trigger(Entrada do Pulso) 13 -> Pino do Echo(Saida do Pulso) No manual do hc-sr04 consta que deve ser usando um intervalo de 60 ms ou mais, estando incorreto em #define PING_INTERVAL 50 Essa versão de código que você pegou calcula manualmente, e está modificado para um objetivo diferente do seu. Aconselho a usar a versão própria do hc-sr04. https://github.com/RoboCore/Ultrasonic/blob/master/Ultrasonic.cpp https://github.com/RoboCore/Ultrasonic/blob/master/Ultrasonic.h
-
Boa tarde, então quando você for usar um componente eletrônico que utilize programação sempre busque no github que você vai encontrar um código open-source pronto para ser adaptado. No seu caso, precisamos saber qual o problema para dar a nossa opinião. Enfim, segue alguns links que lhe ajudam muito: https://github.com/JRodrigoTech/Ultrasonic-HC-SR04/tree/master/Ultrasonic - Código do Arduino https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf - Manual em Inglês https://www.robocore.net/tutoriais/primeiros-passos-com-sensor-ultrassonico.html - Tutorial em Portugês
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