Ajuda C

xyM

Membro
Boa noite, tenho um trabalho para a minha cadeira de programação onde estamos a dar C e não consigo entender o porquê de o programa não estar a funcionar bem de acordo com o enunciado.

Enunciado Alínea B

Código:
#include <stdio.h>

int main (void){


    int num;\\Número lido no input
    printf("Val? ");
    scanf("%d",&num);
    
    if(((num & 0xf) == ((num >> 12) & 0xf)) && (((num >> 4) & 0xf) == ((num >> 8) & 0xf))){
        printf("É capicua\n");
    }
    else {
        printf("Não é capicua\n");
    }
return 0;
}



Se alguém me pudesse ajudar seria óptimo, e peço desculpa por vos chatear com isto :D

Bom basicamente a respostas obtidas não são as esperadas... Aqui está o print do que me dá no terminal .

Qualquer ajuda é boa por mais pequena que seja
Já agora aceitava também sugestões para as alíneas a seguir visto que não sou muito bom com operações bit a bit, e mais uma vez peço desculpa por vos chatear com isto.
 
Assim a olho parece bem... Tenta fazer print do que sai de cada um dos dos 4 ands bit a bit, pa poderes comparar e perceber o que se está a passar.
 
Assim a olho parece bem... Tenta fazer print do que sai de cada um dos dos 4 ands bit a bit, pa poderes comparar e perceber o que se está a passar.
Isto é muito esquisito, isto é o que me acontece Terminal o erro tem de estar no segundo AND pois cada vez que faço teste com o valor: abba (que supostamente é capicua) o valor do segundo AND mudava sempre. Não tenho a certeza se era suposto (duvido) mas... gostava de saber se era suposto acontecer isso?
 
Experimenta por um \n dentro do scanf. Muito sinceramente não sei o que diga, mas se reparares qualquer um deles tá a dar o valor errado, não é só o 2º...

edit: experimenta também por logo int num = 0xabba em vez de ler com o scanf, para despistar erros. Eu acho que isso deve tar a ler mal.
 
Experimenta por um \n dentro do scanf. Muito sinceramente não sei o que diga, mas se reparares qualquer um deles tá a dar o valor errado, não é só o 2º...

edit: experimenta também por logo int num = 0xabba em vez de ler com o scanf, para despistar erros. Eu acho que isso deve tar a ler mal.

Pois eu disse que dá bem consoante o que se entende por capícua

EDIT: é de facto de estar a ler mal experimentei por int num=0xabba e deram correcto os valores alguma ideia para como corrigir o erro?
 
Última edição:
Pois eu disse que dá bem consoante o que se entende por capícua

EDIT: é de facto de estar a ler mal experimentei por int num=0xabba e deram correcto os valores alguma ideia para como corrigir o erro?

Código:
scanf(" %x ", num); //espaço antes e depois do %x ou
scanf(" %x\n", num);
Acho que isso tem a ver com o buffer do scanf que fica com "lixo" e dá-te outros valores, na altura que me iniciei pelo C também tive um problema desse tipo.

Já não mexo em C há uns tempos por isso, posso não estar a ajudar em nada xD
Se ajudar ainda melhor xD

Cumps
 
Código:
scanf(" %x ", num); //espaço antes e depois do %x ou
scanf(" %x\n", num);
Acho que isso tem a ver com o buffer do scanf que fica com "lixo" e dá-te outros valores, na altura que me iniciei pelo C também tive um problema desse tipo.

Já não mexo em C há uns tempos por isso, posso não estar a ajudar em nada xD
Se ajudar ainda melhor xD

Cumps
De facto assim fica a funcionar mas sempre que insiro um valor e dou enter aquilo só executa se eu meter um caracter qualquer e der enter
 
Experimenta trocar o %d por %x, pode ser disso..

Por isso perguntei qual a base. Espero que estejas a ver que estás a introduzir o número em base 10 e depois a ver se esse número, convertido para hexadecimal, é capicua (em hexadecimal).

E não te esqueças que são introduzidos zeros à esquerda até atinguir o número de bits correspondentes ao tipo integer. Esses zeros à esqerda vão provavelmente destruir a capicuidade.

E claro, %d implica que coloque uma constante só com 0 a 9 e eventualmente + ou - como resposta. Nem abba nem cafe têm essas características. O comportamento é imprevisível. Podes tentar escrever oxabba, pode ser que funcione, mas não se pode garantir.



%x implica uma constantante hexadecimal, e abba e cafe sao-no

http://www.cplusplus.com/reference/cstdio/scanf/
 
Última edição:
Por isso perguntei qual a base. Espero que estejas a ver que estás a introduzir o número em base 10 e depois a ver se esse número, convertido para hexadecimal, é capicua (em hexadecimal).

E não te esqueças que são introduzidos zeros à esquerda até atinguir o número de bits correspondentes ao tipo integer. Esses zeros à esqerda vão provavelmente destruir a capicuidade.

E claro, %d implica que coloque uma constante só com 0 a 9 e eventualmente + ou - como resposta. Nem abba nem cafe têm essas características. O comportamento é imprevisível. Podes tentar escrever oxabba, pode ser que funcione, mas não se pode garantir.



%x implica uma constantante hexadecimal, e abba e cafe sao-no

http://www.cplusplus.com/reference/cstdio/scanf/

Sim, sim eu entendi logo o erro quando o MAntunes disse para trocar a maneira como estava a ler o numero. E mais uma vez fico agradecido pela ajuda.
 
Back
Topo