felipess Posted June 5, 2024 at 02:39 PM Report Share #633153 Posted June 5, 2024 at 02:39 PM olá! estou estudando pilhas em c mas não estou compreendendo muito bem. #include <stdio.h> int carro[5]={0,0,0,0,0}; int topo=0; void show(){ for(int run=0; run < 5; run++){ printf("==="); printf("%d", carro[run]); printf("==="); } printf("\ntopo: %d\n", topo); } void add(){ int pessoa; if(topo < 5){ printf("pessoa: "); scanf("%d", &pessoa); carro[topo] = pessoa; topo = topo +1; } else{ printf("carro cheio\n"); } } void del(){ if(topo > 0){ carro[topo]= 0; topo = topo -1; } else{ printf("carro vazio\n"); } } void clear(){ for(int run=0; run < 5; run++){ carro[run]=0; } topo =0; } int main(){ int op; do{ printf("1-show, 2-add, 3-del, 4-clear, 00-exit: "); scanf("%d", &op); switch(op){ case 1: show(); break; case 2: add(); break; case 3: del(); break; case 4: clear(); break; } }while(op != 00); return 0; } meu código não deleta valor da pilha, e não consigo colocar valor do topo, apenas a quantidade. Apenas os soldados mortos veem o fim da guerra! Link to comment Share on other sites More sharing options...
Solution user Posted June 5, 2024 at 02:53 PM Solution Report Share #633154 Posted June 5, 2024 at 02:53 PM na tua função del(), estás a limpar o valor do próximo elemento, pois, segundo a lógica que consigo compreender do código fornecido, a variável topo contem o a contagem do proximo elemento que vais adicionar. na tua função del(), experimenta desta maneira: topo = topo -1; carro[topo]= 0; Não consigo compreender o problema de não conseguires adicionar o valor a pilha, talvez se trate de um "bug" com o scanf do C (que não é bem um bug), que quando usas o scanf mais do que uma vez, o scanf vai ler o "enter" anteriormente inserido no primeiro uso da função. Para que isto deixe de acontecer, sempre que se utiliza o scanf, é necessário limpar o "input do teclado" (chamado de stdin buffer) para que o 'enter' nao seja lido pelo scanf. função para limpar o buffer stdin: void clearBuffer() { char c; do { c = getchar(); } while (c != '\n' && c != EOF); } Agora, sempre que usares o scanf, chamas o clearBuffer() antes para garantir que o scanf não irá ler o 'Enter' pressionado pelo teclado do input anterior. Exmplo: clearBuffer(); scanf("%d", &pessoa); Não te esqueças do o chamar também no menu principal antes de ler a opção Link to comment Share on other sites More sharing options...
felipess Posted June 5, 2024 at 07:09 PM Author Report Share #633156 Posted June 5, 2024 at 07:09 PM agora com sua correção está funcionando, obrigado! Apenas os soldados mortos veem o fim da guerra! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now