Dúvida sobre estruturas em C++ | ZWAME Fórum
Dúvida sobre estruturas em C++
Discussão em 'Programação' iniciada por Caveira, 2 de Março de 2008. (Respostas: 11; Visualizações: 1750)
Oi pessoal, tenho o seguinte array em c++:
struct meses {
int n, ndias;
} mes[12];
é 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.
strcpy(mes[0].nome, "Janeiro");
strcpy(mes[1].nome, "Feveiro");
strcpy(mes[2].nome, "Março");
strcpy(mes[3].nome, "Abril");
strcpy(mes[4].nome, "Maio");
strcpy(mes[5].nome, "Junho");
strcpy(mes[6].nome, "Julho");
strcpy(mes[7].nome, "Agosto");
strcpy(mes[8].nome, "Setembro");
strcpy(mes[9].nome, "Outubro");
strcpy(mes[10].nome, "Novembro");
strcpy(mes[11].nome, "Dezembro");
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!
Em C ficaria:
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.
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:
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;
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.
Sera que é por isso? ou sera porque a comparação é feita com a instrução xor?
!0 seria 0xFFFFFFFF
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.
xii tão simples como é que eu não me lembrei! muito obrigado pessoal!
Certo. Mas em termos lógicos acho que sim.
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.
afinal é C++ ou C?
std::string é tua amiga!
OK, se achas que torna o código mais legível, tudo bem. Eu pessoalmente uso o operador !. É uma opção pessoal.