Olen kamppaillut pitkän aikaa seuraavan ongelman kanssa. Ohjelman pitäisi tulostaa 23 ja 59, mutta se tulostaa -1208036992 ja -1208307724. Ongelmanratkasua vaikeuttaa se ettei tota mainin koodia näytetä. Mikä tässä menee pieleen?
void checkTime(int *h, int *m)
{
int hours, minutes;
h = &hours;
m = &minutes;
scanf("%d ", &hours);
scanf("%d", &minutes);
while((hours < 0) || (hours > 23) || (minutes < 0) || (minutes > 59)){
printf("Error, not a correct time.");
printf("\nEnter the time: ");
scanf("%d ", &hours);
scanf("%d", &minutes);
}
}Kun koodin suoritus palaa checkTime()-funktiosta sinne mistä sitä kutsuttiin, paikalliset muuttujat hours ja minutes lakkaavat olemasta. Älä aseta muuttujia h ja m osoittamaan niihin, vaan tallenna arvot suoraan muistipaikkoihin *h ja *m. Voit tehdä sen funktion lopussa näin:
*h = hours; *m = minutes;
Kiitos! Pienien korjailujen jälkeen järkevimmältä vaikutti tämä.
void checkTime(int *h, int *m)
{
int hours, minutes;
while((hours < 0) || (hours > 23) || (minutes < 0) || (minutes > 59)){
scanf("%d %d", &hours, &minutes);
printf("Error, not a correct time.");
printf("\nEnter the time: ");
*h = hours;
*m = minutes;
}
}Esimerkkivastauksesa oli vähän eroa.
while (!(((0<=*h)&&(*h<24))&&((0<=*m)&&(*m<60))))
{
while(getchar()!='\n');
printf("Error, not a correct time.\n");
printf("Enter the time: ");
scanf("%d %d",h,m);
}Testaatko koodeja ollenkaan itse, vai syötätkö niitä sokeasti Viopeen? Nykyinen koodisi toimii aivan väärin: se tulosta virheilmoituksen aina, myös oikean kellonajan jälkeen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.