Calcular ritmo de prova

FSadino

Power Member
Recebo este erro no primeiro scanf

parse error before `:' token

O que esta mal no codigo?


#include <stdio.h>
#include <stdlib.h>

int main (void)
{

int H=3600, M=60, h, m, s;
float KM=1000, km;

printf ("Indique o tempo que demorou a prova (exemplo: 01:40:00): ");
scanf ("%d":"%d":"%d" ,&h,&m,&s);

printf ("Indique a distancia percorrida (exemplo 10km)");
scanf ("%f", &km);

printf ("O ritmo medio da prova foi de %f", km/((H*h)+(M*m)+s));
system ("pause");

return 0;
}
 
Estás a fazer "%d":"%d":"%d", o que para o compilador são 3 strings com : no meio.
Tens que escapar as aspas que queres imprimir: "\"%d\":\"%d\":\"%d\"".
 
Estás a fazer "%d":"%d":"%d", o que para o compilador são 3 strings com : no meio.
Tens que escapar as aspas que queres imprimir: "\"%d\":\"%d\":\"%d\"".

Bom dia. Ja consigo compilar sem erros, mas assim que ponho o tmpo de prova (no formato 01:40:00) o programa imprime logo o resultado final sem que eu introduza a distancia percorrida, e claro, o resultado é errado.

Cumprimentos
 
Última edição:
O scanf está a deixar algum input no stdin, daí o próximo scanf ser logo processado.
A forma simples mas menos aconselhável é limpar o stdin com fflush(stdin); mas pronto, isto é só para desenrascar.
A forma mais correcta é não deixar mesmo nada por ler que não se queria, mas o scanf não é a melhor função para isso, experimenta usar %02d no scanf.
 
Boas, ve se serve este, um que fizemos uma vez na aula, ja o alterei para se parecer mais com o teu.

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main (void)
{
float h,m,s,km,media;
printf("Indique o tempo que demorou a prova (no formato 01:40:00): \n");
scanf("\%f:%f:%f" ,&h,&m,&s);
printf("Indique a distancia percorrida (exemplo 10km)\n");
scanf("\%f", &km);
{
media= (km*1000)/((3600*h)+(60*m)+s);
}
printf("O ritmo medio da prova foi de: %4.2f (m/s)\n",media);
system ("pause");
return 0;
}


O teu com algumas correções.

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
float H=3600, M=60, h, m, s;
float KM=1000, km;
printf ("Indique o tempo que demorou a prova (exemplo: 01:40:00): ");
scanf("\%f:%f:%f" ,&h,&m,&s);
printf ("Indique a distancia percorrida (exemplo 10km)");
scanf ("\%f", &km);
printf ("O ritmo medio da prova foi de %f\n", km/((H*h)+(M*m)+s));
system ("pause");
return 0;
}
 
Última edição:
A forma mais correcta é não deixar mesmo nada por ler que não se queria, mas o scanf não é a melhor função para isso, experimenta usar %02d no scanf.
Boas, por curiosidade, qual seria a função mais correcta para user input neste caso? fgets()?

Ando a tentar escapar do fflush(), mas não estou a ter sucesso com o scanf() nem com o fgets() sem ele no fim de cada input.

Exemplo:
Código:
char targetname[13];
printf("Introduz o teu nome: ");
fgets(targetname, 12, stdin);
fflush(stdin);
 
Última edição:
Boas, ve se serve este, um que fizemos uma vez na aula, ja o alterei para se parecer mais com o teu.

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int main (void)
{
float h,m,s,km,media;
printf("Indique o tempo que demorou a prova (no formato 01:40:00): \n");
scanf("\%f:%f:%f" ,&h,&m,&s);
printf("Indique a distancia percorrida (exemplo 10km)\n");
scanf("\%f", &km);
{
media= (km*1000)/((3600*h)+(60*m)+s);
}
printf("O ritmo medio da prova foi de: %4.2f (m/s)\n",media);
system ("pause");
return 0;
}


O teu com algumas correções.

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
float H=3600, M=60, h, m, s;
float KM=1000, km;
printf ("Indique o tempo que demorou a prova (exemplo: 01:40:00): ");
scanf("\%f:%f:%f" ,&h,&m,&s);
printf ("Indique a distancia percorrida (exemplo 10km)");
scanf ("\%f", &km);
printf ("O ritmo medio da prova foi de %f\n", km/((H*h)+(M*m)+s));
system ("pause");
return 0;
}

Ora viva,

Falhou essas duas coisas no meu, o float e o scanf. Agora ta tudo ok. Obrigado :)

Cumprimentos e mais uma vez obrigado a todos
 
Back
Topo