Ir ao conteúdo

isrnick

Membro Pleno
  • Posts

    1.558
  • Cadastrado em

  • Última visita

Tudo que isrnick postou

  1. A ideia do @arfneto seria ter uma matriz de tamanho 90x90 na memória mas só usar uma parte dela, ou seja usar a parte que interessa para as dimensões escolhidas pelo usuário.
  2. Desculpa indiquei a função errada... strcmp é para comparar strings... strcpy e strncpy são as funções para copiar strings. Então na verdade seria assim: //Copia a string do vetor nm para o vetor NovoElemento->nm: strcpy(NovoElemento->nm, nm); //Copia a string do vetor ab para o vetor NovoElemento->ab: strcpy(NovoElemento->ab, ab);
  3. A funcionalidade do jogo no Windows me parece ser a mesma da proposta no enunciado. No campo minado do Windows você deve clicar com o botão direito do mouse para marcar uma posição com a bandeira onde acha que tem uma mina, aí não tem risco de clicar por engano e detonar a mina marcada, porque não dá pra clicar na casa marcada, e também vai subtraindo do número de minas ainda não descobertas. Sempre funcionou assim mas é normal não saber, a muita gente que já jogou não sabe.
  4. Aí está o problema, essas atribuições não fazem o que você deseja (na verdade nem existe índice 20 nesses vetores, os índices nesse caso vão de 0 a 19, e na segunda linha também está errado, deveria guardar em NovoElemento->ab). Em C não dá para copiar um vetor inteiro fazendo uma atribuição com =, é necessário copiar o valor de cada posição do vetor, um por um. Mas no caso de vetores de caracteres contendo strings já existe a funções para copiar, no caso strcmp() e strncmp() que faz parte da biblioteca string.h então para usar deve incluir essa biblioteca. Nesse caso ficaria assim: #include <string.h> . . . //Copia a string do vetor nm para o vetor NovoElemento->nm: strcmp(NovoElemento->nm, nm); //Copia a string do vetor ab para o vetor NovoElemento->ab: strcmp(NovoElemento->ab, ab);
  5. A struct Playlist_Musica está definida como? Não tem nada que pareça estar errado nesse printf, O mais provável é que ElementoVarredura esteja apontando para algo errado ou então esses dados não estejam sendo guardados corretamente na lista.
  6. O que você está tentando fazer nessa linha? ElementoVarredura = Head; Você acabou de fazer o ponteiro ElementoVarredura apontar para um endereço de um espaço da memória reservado com malloc na linha anterior, mas imediatamente em seguida faz ele apontar para outra coisa? Não entendi...
  7. isrnick

    C Over flow de int

    Usando unsigned long long dá pra calcular até 20! corretamente: #include <stdio.h> int main(){ unsigned long long fat; unsigned int i; fat = 1; for (i = 1; i < 25; i++){ fat *= i; printf("Fat %u = %llu\n", i, fat); } return 0; } Teste aqui: https://onlinegdb.com/ByGT8-gkH
  8. Eu fiz um campo minado um tempo atrás, até postei aqui no fórum na resposta em um tópico que o autor também postou outro código de campo minado: Mas usei uma lógica diferente da proposta no enunciado do seu trabalho, não marca os campos como possíveis minas por exemplo.
  9. Como o @KXSY falou, a própria linguagem já tem recursos para imprimir um número inteiro na base hexadecimal. No caso do C basta usar %x ou %X como especificador de tipo no printf: #include <stdio.h> int main() { printf("\n%d\n", 123); printf("\n%x\n", 123); printf("\n%X\n", 123); return 0; } Mas como o título do seu tópico diz que é sobre C++, então bastaria usar std::hex para mudar a base: #include <iostream> int main() { std::cout << 123 << "\n"; //base decimal é o padrão std::cout << std::hex << 123 << "\n"; //hexadecimal std::cout << std::hex << std::uppercase << 123 << "\n"; //hexadecimal maiúsculo std::cout << std::dec << std::nouppercase << 123 << std::endl; //volta para a base decimal e desfixa o maiúsculo //Ou então: using namespace std; cout << "\n" << dec << 123 << "\n"; cout << hex << 123 << "\n"; cout << hex << uppercase << 123 << "\n"; cout << dec << nouppercase << 123 << endl; return 0; } Mas se a ideia é programar o cálculo da conversão de bases e depois imprimir o resultado em hexadecimal, então isso não serve para o seu caso.
  10. Use: scanf(" %40[^\n]", livro[cont].tit); No lugar de: gets(livro[cont].tit); scanf com %s não vai ser suficiente pra substituir o gets, pois só vai capturar a primeira palavra ao invés da frase inteira, para isso deve do especificador %[ como mostrei, capturando qualquer caractere exceto o caractere nova linha '\n'. Também precisa limitar o número de caracteres, nesse caso captura até 40 caracteres, do contrário cai no mesmo problema de usar gets que poderia causar estouro do tamanho máximo que o vetor de caracteres pode armazenar.
  11. Teste colocar um espaço antes do %c nas strings dos scanfs para descartar os caracteres brancos que vierem antes da letra digitada. Ex: scanf(" %c",&sair_pes);
  12. Pois é... Não existe fila na biblioteca padrão da linguagem C, você precisa implementar sua própria fila para depois usá-la, ou então usar uma biblioteca ou código de terceiros que já tenham programado filas em C.
  13. FindFirstFile, FindNextFile e FindClose não são modernos, fazem parte da Win32 API que já está aí desde 1995. Agora que <filesystem> faz parte da biblioteca padrão do C++, ela é a melhor opção disponível atualmente para funcionar em todas as situações e ser portável, pois não precisa lidar com versões corretas de bibliotecas para cada compilador, e não depende do sistema operacional utilizado.
  14. @arfneto Esta parte que quotei é a sessão do readme do github onde o autor mostra alternativas ao dirent, eu estava comentando que o próprio autor menciona que o MinGW e Cygwin usam outros API que não são o dirent programado por ele.
  15. @arfneto Segundo a própria página do github do T. Ronkko a versão dele foi uma "versão portada para Windows" que ele fez da dirent.h original feita para Linux/UNIX. Ele também diz que fez isso pois na época não haviam muitas alternativas, mas menciona que hoje em dia existem boas alternativas, e aponta o MinGW e o Cygwin como alternativas pois permitem compilar programas UNIX no Windows (ou seja, ele sugere que poderia compilar a dirent.h original do Linux/UNIX diretamente, ao invés de uma a versão portada para Windows), e ele também aponta que ambos já fornecem a API dirent completa como parte do pacote, além de várias outras APIs do Linux/UNIX.
  16. Nesse caso ele copiaria apenas o primeiro dos espaços repetidos. Mas não é a mesma coisa, pois i começa igual a 0, e nesse caso i-1 = 0-1 = -1 e não existe índice negativo. (Esse problema aconteceria na situação em que o primeiro caractere da string for um espaço ' ').
  17. Índices das posições nos vetores na linguagem C começam com índice 0, logo i e j devem ser inicializados com valor 0 na função (e no for). Uma maneira seria fazer algo assim: Trocar: if(s[i] != ' '){ Por: if(s[i] != ' ' || s[i+1] != ' '){ adicionado 3 minutos depois Assim ele só copia o último dos espaços repetidos.
  18. Seu programa usa várias funções repetidas quando poderia usar apenas uma: int mes(int a, int ndias) { int i, j, mes[5][7], k = 1; if (a == 0) a = 7; for (i = 0; i < 5; i++) { for (j = 0; j < 7; j++) { if(k < ndias + 1 && (i*7 + j + 1) >= a){ mes[i][j] = k++; } else mes[i][j] = 0; } } printf("Dom Seg Ter Qua Qui Sex Sab\n\n"); for (i = 0; i < 5; i++) { for (j = 0; j < 7; j++) { printf("%3d ", mes[i][j]); } printf("\n"); } } E poderia chamar a função assim: if((m%2)&&(m<9)||(m%2==0)&&(m>=8)) { mes(x, 31); } Edit: adicionei a correção ao if ...
  19. if(k<30 && (i*7 + j + 1) >= a){ Corrigi...
  20. O enunciado como você postou implica que a string deve ser alterada de fato, na memória, ao invés de apenas imprimir na tela sem os espaços extras, mas se for apenas para imprimir na tela com apenas 1 espaço então pode seguir uma lógica parecida sim... adicionado 10 minutos depois Se puder criar outra string que copia a string original eliminando os espaços repetidos então também dá pra usar esse método.
  21. Sim mas pode converter 0 para 7 fazendo um simples: if (a == 0){ a=7; }
  22. Acho que não vai servir, o programa no livro apenas imprime outro caractere no lugar onde haveria um espaço, a string nem é alterada, apenas é impressa com caractere diferente na tela. Mas pelo que entendi o seu programa deve receber uma string que pode conter espaços duplicados, como: "minha mae mandou eu" E eliminar os espaços repetidos deixando 1 espaço só em cada lugar: "minha mae mandou eu"
  23. O fórum sumiu com todos os [ i ] sem espaços do seu código, pois para o fórum isto é a tag para deixar o texto em itálico (note que o texto está em itálico a partir do primeiro lugar onde deveria será o [ i ]). Leia minha assinatura abaixo para ver como postar código corretamente no fórum, e evitar que o fórum faça alterações nele. Onde está? É esse valor que vem como parâmetro na variável int a? Se sim, poderia mudar esse if: if(k<30){ para if(k<30 && (i*j + j + 1) >= a){ Mas antes precisa fazer 7=sábado ( if (a == 0) a=7; ).
  24. for (int i =0; i < tamanho_3; i++){ if (k >= tamanho_2){ vet_3[i] = vet_1[j]; j++; } else if (j >= tamanho_1){ vet_3[i] = vet_2[k]; k++; } else if (vet_1[j] < vet_2[k]){ vet_3[i] = vet_1[j]; j++; } else { vet_3[i] = vet_2[k]; k++; } }
  25. Nos colchetes o índice está escrito "maoir" ao invés de "maior". Leia a mensagem de erro ela costuma dar uma boa ideia de onde está o problema.

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!