Ir ao conteúdo
  • Cadastre-se

Pedroernesto64

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

3
  1. Mas uma vez que ele encontra um dos operadores (+-*/), ele não deveria parar de acessar a memória? Funcionou assim quando fiz o teste do while usando apenas o operador de soma. Update: O erro estava na minha lógica. Troquei || por &&, e funcionou. Pelo que entendi, ele só parava quando identificava SÓ o +, ou SÓ o -... E por isso estourava a memória. Obrigado pela dica do fgets também. Vou procurar.
  2. Estou tentando fazer uma função que recebe uma cadeia de caracteres, contendo letras e operadores aritméticos. A ideia é contar quantas letras há antes de encontrar um operador. Exemplo abc* (3 letras) abcde+- (5 letras) Para isso, fiz um while que escaneia a cadeia, incrementando um contador, até encontrar um dos operadores: int n=0; while (cadeia[n]!='+' || cadeia[n]!='-' || cadeia[n]!='*' || cadeia[n]!='/') { n++; //Incrementa o contador até encontrar um dos operadores } O programa compila, porém retorna zsh: segmentation fault (core dumped) quando testo alguma cadeia. Entretanto, se eu remover os OR e deixar apenas while (cadeia[n]!='+'), ele funciona como deveria (porém, limitado ao operador de soma). Já consegui fazer uma alternativa usando condicionais, mas gostaria de saber o que está acontecendo. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int Qnt_Operandos (char cadeia[]) { //Verifica a quantidade de operandos na cadeia int n=0; while (cadeia[n]!='+' || cadeia[n]!='-' || cadeia[n]!='*' || cadeia[n]!='/') { n++; //Incrementa o contador até encontrar um dos operadores } return n; } //------------------------------------ int main () { char cadeia[50]; gets (cadeia); printf ("%d", Qnt_Operandos(cadeia)); return 0; }
  3. Um detalhezinho que a gente esquece, e já quebra tudo kk. Muito obrigado! Isso também foi essencial. Valeu!
  4. Estou tentando fazer um programa básico de pilhas em C, usando alocação dinâmica. Ele compila, e eu dou as seguintes entradas: 7 (tamanho da pilha) 1 (opção push) 3 (valor que quero inserir na pilha) Após isso, ele me retorna "zsh: segmentation fault (core dumped)", indicando que falta memória para a operação. Achei que a linha "pilha=(int *) malloc (n * sizeof(int))" já daria conta disso. O que estou fazendo errado? Obs: Estou compilando usando gcc num PC com Manjaro. #include <stdio.h> #include <math.h> #include <stdlib.h> void TPilha_Atual (int *pilha, int topo) { //Imprime todos os elementos da pilha int i; printf ("Pilha atual: "); for (i=1; i<=topo; i++) { printf ("%d ", pilha[i]); } printf ("\n"); } int TPilha_EhVazia (int topo) { //Verifica se a pilha está vazia if (topo==0) { printf ("A pilha está vazia\n"); return 1; } else { return 0; } } int TPilha_EhCheia (int max, int topo) { //Verifica se a pilha está cheia if (topo==max) { printf ("A pilha está cheia\n"); return 1; } else { return 0; } } void TPilha_Empilha (int *pilha, int insere, int topo) { //Insere um elemento, e depois imprime a pilha pilha[topo+1]=insere; TPilha_Atual(pilha, topo); } //--------------------------------- int main () { int *pilha; int n, opcao, insere, topo=0; printf ("Digite o tamanho da pilha: "); scanf ("%d", &n); printf ("\n"); pilha=(int *) malloc (n * sizeof(int)); //Inicia a pilha com o tamanho desejado while (opcao!=4) { printf ("Escolha uma operação (1-push / 2-pop / 3-top / 4-fim): "); scanf ("%d", &opcao); switch (opcao) { case 1: //Caso "Push" (insere um item) if (TPilha_EhCheia(n, topo)==0) { //Verifica se um elemento pode ser adicionado printf ("Digite o número desejado: "); scanf ("%d", insere); printf ("\n"); TPilha_Empilha(pilha, insere, topo); topo++; } break; case 2: //Caso "Pop" (retira o último item) if (TPilha_EhVazia(topo)==0) { //Verifica se um elemento pode ser retirado topo--; //Diminui o índice do topo, ignorando o valor posterior TPilha_Atual(pilha, topo); } break; case 3: //Caso "Top" (verifica o valor do último item) if (TPilha_EhVazia(topo)==0) { printf ("%d", pilha[topo]); } break; } } 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...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!