Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
rjort_nine

C Operador Ternario '? nao executando 'true' '

Recommended Posts

Tenho o seguinte fragmento de codigo:

  for(i = 1; i < SIZE; i++) {
    for(j = 0; j < ELEMENTOS; j++) {
        //auxElementTransfer vai usar as posições referente ao vetor de linhaB em f[0]
        //que vai pegar o valor da posicao e jogar em f[i].linhaB[j], 'i' a partir da
        //posicao 1.
        f[i].linhaB[j] = f[0].linhaB[auxElementTransfer+auxAuxElement];
        ++auxElementTransfer;
        if(auxElementTransfer == limResetAuxElmTrns) {auxElementTransfer = 0;}
    }
    ++auxAuxElement;
  }

agora quando eu uso o operador ternario '?' para substituir o 'IF' em:

if(auxElementTransfer == limResetAuxElmTrns) {auxElementTransfer = 0;}

para:

auxElementTransfer == limResetAuxElmTrns ? auxElementTransfer = 0 : printf("error\n");

só é executado a condição do 'printf' que seria o 'ELSE', mas essa seria uma condição impossivel de se alcançar no codigo, uma vez que usando o 'IF' ele executa como se deve.

ao compilar usando o GCC com -Wall ou Clang com -Wextra nao acusam nenhum erro, e usando o GDB para debugar o codigo tudo ocorre perfeitamente.

Alguem poderia me dizer o que pode ta ocorrendo para a condição 'TRUE' (auxElementTransfer = 0) usando o operador ternario '?' nao esta sendo executada??? Obrigado desde já =)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente:

// variavel = condicao ? valor se true: valor se false;
auxElementTransfer = (auxElementTransfer == limResetAuxElmTrns) ? 0 : -1;
//Mensagem
printf("%s\n", (auxElementTransfer == 0) ? "Sucesso" : "Erro");

 

Editado por TYSQUARE89
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @TYSQUARE89 deu certo nao... o output do que deveria ter gerado nao saiu correto, mas valeu... tipo... usar o ternario nao é necessario, só seria pra da uma variada mesmo... vou deixar o IF mesmo

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Esse é um erro comum, o operador ternário não substitui IF. Ele é um operador de atribuição, não um substituto do IF.

    Exemplo de uso:

    int m = 1, n = 2;
    int x;
    x = n > m? n: m;

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • valeu, apos muita pesquisa acabei descobrindo isso... vivendo e aprendendo hahahahahah' vou procurar outros lugares do codigo pra poder usar isso, brigadão =D

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @rjort_nine     testei esse ternário aqui e ele funcionou normal do jeito que você queria,  imagino que essa variável   auxElementTransfer    e essa    limResetAuxElmTrns    sejam inteiro, e ele executa   se for verdadeiro e também se for falso .

    veja o teste que fiz :

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    int main(){
        int auxElementTransfer=5;/* se mudar o valor ele imprime do jeito certo també */
        int limResetAuxElmTrns=5;
        auxElementTransfer == limResetAuxElmTrns ? auxElementTransfer = 0 : printf("error\n");
        printf("val de auxElementTransfer %d",auxElementTransfer);
        return 0;
    }  

    então se as duas variáveis forem iguais ,   ele faz o que está antes dos dois pontos , e se não for iguais  ele faz o que está depois dos dois pontos .

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×