1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida sobre estruturas em C++

Discussão em 'Programação' iniciada por Caveira, 2 de Março de 2008. (Respostas: 11; Visualizações: 1657)

  1. Caveira

    Caveira Power Member

    Oi pessoal, tenho o seguinte array em c++:

    é um array com 12 estruturas, cada uma com o número do mês, o número de dias do mês e o nome do mês.

    Agora eu queria que o utilizador introduzisse o nome do mês e depois o programa descobrisse o número do mês. Ou seja, descobrir x onde:
    mes[x].nome = "nome introduzido pelo utilizador"

    Espero que me esteja a fazer entender. Isto é para um trabalho de bases de programação. Obrigado por qualquer ajuda!
     
  2. Baderous

    Baderous Banido

    Em C ficaria:

    Código:
    int i,numero;
    for (i=0;i<12;i++)
        if (strcmp(mes[i].nome,[COLOR=Red]mesIntroduzido[/COLOR])==0)
            numero=i+1;
    onde mesIntroduzido seria o mês pelo qual estarias a procurar e numero seria o nº do mês em questão que pode ser obtido através do índice do array.
     
  3. mj2p

    mj2p I'm Cool Cuz I Fold

    O método que o Baderous te disse é aquele que acho que se deve implementar para este problema. Só lhe fazia uma pequena alteração:

    Código:
    int i,numero;
    for (i=0;i<12;i++)
        if ([COLOR=red]![/COLOR](strcmp(mes[i].nome,[COLOR=white]mesIntroduzido[/COLOR][COLOR=#ffffff]))
            numero=i+1;[/COLOR]
    
    A função strcmp() indica que duas strings são iguais quando retorna 0 (isto acontece pois o que a função na verdade avalia é a diferença entre as duas strings).

    Assim, se alguma expressão ou variável tem o valor zero, o if considera isso como FALSE, logo não se entrava dentro do corpo do if. Para contrariar isto, usa-se o operador !, que nega o valor da condição. Assim, imaginando que x=0, ao fazer !x teria-se que x=1;

    Espero que tenhas compreendido a explicação.

    Vá, cumps
     
  4. Baderous

    Baderous Banido

    O que tu dizes está correcto mas é exactamente a mesma coisa, visto que só depois de fazeres o strcmp é que sabes o valor da expressao a ser avaliada pelo if (igual a 0 ou diferente de 0). E atenção que ser diferente de 0 não implica que seja igual a 1.
     
  5. theforbidden1

    theforbidden1 Banido

    Sera que é por isso? ou sera porque a comparação é feita com a instrução xor?
     
  6. theforbidden1

    theforbidden1 Banido

    !0 seria 0xFFFFFFFF ;)
     
  7. Baderous

    Baderous Banido

    Mas então se a 1ª string for alfabeticamente inferior à 2ª, a função strcmp tem de devolver um resultado negativo, e da maneira que tu dizes, devolve 1. :confused:
     
  8. Caveira

    Caveira Power Member

    xii tão simples como é que eu não me lembrei! :-D muito obrigado pessoal!
     
  9. mj2p

    mj2p I'm Cool Cuz I Fold

    Certo. Mas em termos lógicos acho que sim.

    Vá, cumps
     
  10. The_True_Eue

    The_True_Eue Power Member

    Exactamente pelo facto de não estares a tratar valores lógicos mas sim inteiros deveria escrever-se a condição como strcmp(...)==0, tornando o código muito mais legível.

    Quando usas operações lógicas (!, &&, ||) o zero vale por falso e qualquer outra coisa, não necessariamente 1, vale por verdadeiro.
     
    Última edição: 3 de Março de 2008
  11. sapropel

    sapropel Power Member

    afinal é C++ ou C?
    std::string é tua amiga!
     
  12. mj2p

    mj2p I'm Cool Cuz I Fold

    OK, se achas que torna o código mais legível, tudo bem. Eu pessoalmente uso o operador !. É uma opção pessoal.

    Cada um escolhe o código que melhor se adapta a cada um.

    Vá, cumps
     

Partilhar esta Página