Se calhar não é a abordagem mais "profissional" mas também resolve.
Este próximo exercício que eu te vou pedir sugestões é o último da batch xd
Pretende-se desenvolver um programa para ler valores de tempo no formato “h(hora) m(minuto) s(segundo)”, devolvendo o número de segundos associado ao tempo introduzido.
No entanto, o utilizador deve poder omitir campos (e.g. introduzir só “h23”). Para terminar a leitura o utilizador pode introduzir um carácter diferente de ‘h’, ‘m’ ou ‘s’. Pretende-se também que o programa valide os valores introduzidos, não deixando introduzir valores de minutos ou segundos superiores a 59, nem introduzir campos repetidos (só se pode introduzir 0 ou 1 campo de hora; 0 ou 1 campo de minuto; 0 ou 1 campo de segundo). Repare que:
São necessárias variáveis para guardar cada componente do tempo;
Só há leitura da parte numérica de uma componente do tempo se o carácter for válido;
Dependendo do carácter lido, o valor numérico contribui para o valor final de tempo com um peso diferente;
O ciclo de leitura de componentes do tempo não tem um número de componentes fixo, nem uma ordem fixa.
Um exemplo de utilização com a aplicação pretendida:
./final2
Introduza o tempo no formato h(hora) m(minuto) s(segundo): m56 h37 s23 x
Leu 37h 56m 23s = 136583 segundos
./final2
Introduza o tempo no formato h(hora) m(minuto) s(segundo): h1 x
Leu 1h 0m 0s = 3600 segundos
./final2
Introduza o tempo no formato h(hora) m(minuto) s(segundo): h25 m70 x
Erro: número de minutos inválidos .
./final2
Introduza o tempo no formato h(hora) m(minuto) s(segundo): h25 h70 x
Erro: campo hora duplicado.
O meu problema inicial é, como é que eu posso ler com o scanf vários componentes do tempo sabendo que eles podem trocar de sítio (por exemplo "h(hora) m(minuto)" e "m(minuto) h(hora)"?