Ir ao conteúdo
  • Cadastre-se

ScreenBlack

Membro Pleno
  • Posts

    1.062
  • Cadastrado em

  • Última visita

Tudo que ScreenBlack postou

  1. Uma variável mudar de valor sem motivos, realmente nunca vi. Isso está com cara de tratamento com ponteiros. Tentou depurar o programa, analisando a pilha de execução?
  2. Esse erro é por causa da atribuição da variável junto ao texto estático, na função "mysql_query()". Em C não funciona dessa maneira. Tente assim: char buffer_sql[250];sprintf(buffer_sql, "SELECT * FROM users WHERE IP='%s'", getip);mysql_query(conn, buffer_sql);
  3. ScreenBlack

    Dev c++

    Isso é programação C e não C++. Para apresentar o conteúdo de trás pra frente, apenas precisa inverter a contagem do 'for()', indo da posição maior para a menor.
  4. O Windows precisa para fazer a interpretação do programa feito por você para com o Kernel, quando utilizada as bibliotecas do visual studio. Comumente em qualquer ferramenta da Microsoft para Windows.
  5. Pelas mensagens, parece que o compilador está entrando em recursão na hora de fazer o vínculo das bibliotecas. Confirme se não as bibliotecas não estão chamando umas as outras, de maneira redundante. Por exemplo: lib_A chama lib_B que chama lib_A Isso resultaria na mensagem multiple definition of 'nomeDaFunção()'
  6. ScreenBlack

    Dev c++

    Para fazer a validação, não tem mistério: if ( ( valor % 2 ) == 0 ) // Se a sobra da divisão por 2 for zero, então é número par valor = valor * 2; // Dobra o valor
  7. O trecho do código que apresentei, seria a rotina principal de leitura e validação do conteúdo inserido pelo usuário.
  8. Em C, nativamente, não é possível armazenar um CHAR em INT, devido ao tamanho de memória ocupado para cada um deles. O tipo CHAR, comumente, ocupa 1 Byte (8 Bits), enquanto o INT ocupa 4 Bytes (32 Bits). Esse tipo de informação é detectada pelo programa no momento da execução. É até possível fazer o que você quer, mas não de maneira trivial. A ideia mais comum, para esse tipo de situação, é fazer a leitura em CHAR e, se for número, converter o CHAR em INT e armazená-lo em uma variável INT. Um exemplo bem simples e com pouco tratamento, apenas obter uma noção: char leitura[100]; int valor = -1; printf("informe o valor: "); scanf(" %s", leitura); if ( leitura[0] >= '0' && leitura[0] <= '9' ) // Considerando que o vetor inteiro seja numerico caso a primeira posicao seja verdadeira valor = atoi(leitura); printf("Conteudo lido: %s\n", leitura); if ( valor < 0 ) printf("Sem valor numerico\n"); else printf("Numero: %d\n", valor);
  9. No "case '1':", o "while()" não está fechado. Após isso corrigido, pode ser que dê a mensagem de erro "switch case is in protected scope". Se isso ocorrer, basta fazer a separação dos cases usando "{ }": case '1': case 'V': case 'v': { int n1, n2, d=1, cont=0;// variaveis printf("digite o primeiro numero: "); // digita dois numeros scanf("%d", &n1); printf("\n"); printf("digite o segundo numero: "); // e ler este dois numeros scanf("%d", &n2); printf("\n"); // pular linha printf("Os numeros primos sao:"); while( n1 <= n2 ) // enquanto num 1 menor ou igual { while( d <= n1 ) { if( n1 % d == 0) // se n1 % d igual incrementar cont++; // variavel contadora d++; } if( cont == 2 ) printf("%3.d ", n1);//imprimir n1++; d = 1; cont = 0; getch(); } break; }
  10. Obrigado amigo @, pela apresentação de uma explicação mais customizada. Tentei explicar utilizando a biblioteca string.h, por se tratar de uma biblioteca padrão na linguagem e também por deixar o código mais simples em ser lido. Mas você tem toda a razão. Utilizando dessa maneira, o código terá um simples e eficiente, para esse caso.
  11. Se entendi bem, você está querendo que um determinado código fique rodando permanentemente até que o usuário informe o comando de saída. Se for isso, precisará usar métodos threading (a mais comum). Temos um tópico bem recente, que fala sobre isso, onde um colega do fórum apresenta um exemplo bem simples.
  12. Para fazer esse tratamento, é muito simples. Segue um exemplo para leitura e listagem de nomes: for ( qtdCadastrada = 0; qtdCadastrada < 250; qtdCadastrada++) { printf("Informe o nome do paciente %d: ", qtdCadastrada + 1 ); scanf(" %[^\n]s", nome[qtdCadastrada] ); if ( strcmp(nome[qtdCadastrada], "p") == 0 ) { nome[qtdCadastrada][0] = '\0'; // Anula o valor inserido na última posição do vetor break; } } for (i = 0; i < qtdCadastrada; i++) printf ("Nome do paciente na posição %d: %s\n", i + 1, nome[i]);
  13. Apenas ajustei o seu código para funcionar o que já foi feito: int opcao = 0; char resposta[5] = {'\0'}; bool op = true; while ( ( opcao > 4 ) || ( opcao < 1 ) ) { printf("\n\n Escolha uma opcao entre 1 e 4: "); scanf("%d", &opcao); } switch ( opcao ) { case 1: printf("\n --> Primeira opcao.."); printf("Deseja continuar aprendendo?:\n"); scanf(" %s", resposta); if( strcmp(resposta, "não") || strcmp(resposta, "n") || strcmp(resposta, "NÃO") || strcmp(resposta, "N") || strcmp(resposta, "Não") ) op = false; break; case 2: printf("\n --> Segunda opcao.."); printf("Deseja continuar aprendendo?:\n"); scanf(" %s", resposta); if( strcmp(resposta, "não") || strcmp(resposta, "n") || strcmp(resposta, "NÃO") || strcmp(resposta, "N") || strcmp(resposta, "Não") ) op = false; break; case 3: printf("\n --> Terceira opcao.."); printf("Deseja continuar aprendendo?:\n"); scanf(" %s", resposta); if( strcmp(resposta, "não") || strcmp(resposta, "n") || strcmp(resposta, "NÃO") || strcmp(resposta, "N") || strcmp(resposta, "Não") ) op = false; break; case 4: printf("\n --> Quarta opcao.."); printf("Deseja continuar aprendendo?:\n"); scanf(" %s", resposta); if( strcmp(resposta, "não") || strcmp(resposta, "n") || strcmp(resposta, "NÃO") || strcmp(resposta, "N") || strcmp(resposta, "Não") ) op = false; break; }Acredito que, a partir dele, seja mais fácil implementar os demais itens.
  14. Entendi o que você quis dizer. Mas acredito que você ainda não entendeu o que tentamos explicar. Se você conseguiu encontrar o maior e o menor valor, então, você também encontrou a posição do vetor em que esses valores se encontram. É essa posição que utilizo para também fazer a busca do nome. Vou tentar demonstrar em exemplo. Caso o maior valor esteja na posição 3 (índice 2) do vetor: char *nome[] = { "lapis", "caneta", "caderno" };float preco[] = { 1.0, 2.0, 8.0 };int maior_valor = 2; // índice do vetor que possui o produto com o maior valorprintf("Produto: %s - Valor: %f\n", nome[maior_valor], preco[maior_valor] );Trabalhando da forma apresentada acima, o valor do índice serve para posicionar todos os vetores.Assim, não precisa ficar copiando nomes e atualizando valores nos vetores. Independente da ideia que apresentei anteriormente, apresentarei o erro que está ocorrendo utilizando sua lógica: for ( i = 0; i <= 3; ++i) //AQUI ESTÁ PRONTO O MAIOR E O MENOR PRECO ATUALIZADOS { if (preco[i] >= maior) { maior = preco_at[i]; strcpy (maior_preco[0], nome[i]); } }
  15. Acredito que não entendeu a ideia que eu e o amigo @ tentamos apresentar. Utilizar o índice para identificar as posições para buscar o conteúdo com maior e menor valor. Exemplo: int maior = 0; int menor = 0; for ( i = 1; i <= 3; i++ ) { if ( preco[i] > preco[maior] ) maior = i; if ( preco[i] < preco[menor] ) menor = i; } printf("\nPRODUTO COM MAIOR PRECO: %-10s R$ %.2f", nome[maior], preco_at[maior] ); printf("\nPRODUTO COM MENOR PREcO: %-10s R$ %.2f", nome[menor], preco_at[menor] );
  16. Faltou fazer o tratamento para expoente de valor zero e de valor um: float potencia(float X, int Y){ float soma = 1.0; int base = X; int i = 0; if ( Y == 0 ) soma = 1.0; else if ( Y == 1 ) soma = X; else if ( Y >= 2 ) for ( i = 0; i < Y; i++ ) soma *= base; else if ( Y < 0 ) for ( i = Y; i < 0; i++ ) soma *= ( (float) 1 / base); // Conversão do resultado da divisão para 'float', antes de executar a multiplicação return soma;}
  17. Cálculo de expoente positivo, nada mais é do que, multiplicar o valor da base pela quantidade de vezes do expoente. Exemplo: 3^3 = 3 * 3 * 3 = 27No caso de expoente negativo, basta inverter a base para que o expoente se torne positivo.Exemplo: 3^(-3) = (1/3)^3 = (1/3) * (1/3) * (1/3) = (1/27)
  18. ScreenBlack

    String com lixo

    Poderia apresentar o trecho do código em que ocorre essa realocação de memória e inserção de carácter?
  19. Tente retirar o ponto e vírgula no final da linha do 'if': if ( a > 0 && a <= 200 ){ // Seu código}
  20. Percorra os dois vetores em busca de valores que coincidam: for ( i = 0; i < 6; i++ ) for ( j = 0; j < 6; j++ ) if ( jogados[i] == sorteio[j] ) printf("Valor igual: %d\n", jogados[i] );
  21. É questão de raciocínio lógico. Exemplo prático: Se somarmos 40 minutos com 40 minutos, teremos 80 minutos, ou seja, valor superior a uma hora (60 minutos). Então, executamos duas vezes a divisão de 80 por 60. A primeira divisão para obter a parte inteira e, na segunda, para obter a parte fracionada. 80 / 60 = 1 (quantidade de horas, portanto, soma-se com a quantidade de horas já existentes)80 % 60 = 20 (resultado da fração de hora, ou seja, minutos)Resultado: 1 hora e 20 minutosExemplo código: minutos_total = minutos_1 + minutos_2; if ( minutos_total > 60 ) // Se total de minutos for superior a uma hora { horas_total = horas_total + (minutos_total / 60); // Armazenamos a quantidade de horas referente a quantidade de minutos if ( (minutos_total % 60) > 0 ) // Se o resto da divisão for maior que zero, significa que ainda sobraram minutos minutos_total = (minutos_total % 60); }
  22. Acho que é isso: void imprime(int quantidade, int posicao){ int valor = 0; if ( posicao < quantidade ) { printf("Digite o valor %d: ", posicao + 1); scanf(" %d", &valor); imprime( quantidade, posicao + 1 ); printf("Valor na posicao %d: %d\n", posicao + 1, valor); }}
  23. Se está armazenando os índices para guardar a posição do maior e menor valor, porém, está informando errado o produto, então, reveja a rotina de busca dos valores. Experimente fazer um teste de mesa em conjunto com a depuração (execução em modo "DEBUG") do programa. É 99,99% de chances em encontrar facilmente o erro.
  24. Usemos a questão matemática a nosso favor. Como o valor de correção é menor para valores mais baixos, logo, nunca ocorrerá de um valor menor, após a atualização, ser maior que um de maior valor, também após a atualização. Dessa forma, tanto fazer buscar o menor e o maior antes ou depois da atualização. Basta encontrar o menor e o maior valor a partir da lista original e depois aplicar a atualização no momento de mostra-los na tela. Para fazer a busca do menor e maior valor, inicie as duas variáveis, que armazenarão esses valores, com o primeiro valor contido na lista principal e, a partir daí, sair comparando com os demais da lista. Obs no código: maior = preco_at[0]; menor = preco_at[0];Comece sempre na posição zero, para buscar o primeiro elemento da lista.
  25. Seu código não faz a busca para o maior e menor valor dos produtos. Uma ideia para mostrar o maior e o menor valor, é armazenar numa variável a posição do vetor em que eles se encontram. Dessa forma, você consegue facilmente buscar nas listas o nome e o valor.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!