Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Viope-harjoitus

feder [14.05.2012 18:16:00]

#

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);
	}
}

jlaire [14.05.2012 18:43:42]

#

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;

feder [15.05.2012 16:52:51]

#

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);
 }

Metabolix [15.05.2012 17:13:20]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta