Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: apumuuttuja

zokin [11.10.2010 20:22:06]

#

Voisko joku keroo että mikä tollanen apumuuttuja on ja mitä se tekee esimerkiks tässä koodissa..Ymmärrän kyllä jotenkin mitä kyseinen pätkä tekee mutta tuo tmp muuttuja ei oikeen aukee,ja onko toi tmp joku yleinen juttu vai vaan heitetty tähän koodiin, kun oon aikaisemminkin sen jossakin nähnyt.

#include<stdio.h>


int main(){
char a, b, c, tmp;
printf("Anna 1. kirjain:");
scanf("%c%c",&a,&tmp);
printf("Anna 2. kirjain:");
scanf("%c%c", &b,&tmp);
printf("Anna 3. kirjain:");
scanf("%c%c",&c,&tmp);
//Muunnetaan pienet kirjaimet isoiksi
if(a>='a')a=a-('a'-'A');
if(b>='a')b=b-('a'-'A');
if(c>='a')c=c-('a'-'A');
//Sitten vertailut
if((a<=b)&&(a<=c))
if(b<=c)printf("%c %c %c\n",a,b,c);
else printf("%c %c %c\n",a,c,b);
else if((b<=a)&&(b<=c))
if(a<=c)printf("%c %c %c\n",b,a,c);
else printf("%c %c %c\n",b,c,a);
else if(a<=b)printf("%c %c %c\n",c,a,b);
else printf("%c %c %c\n",c,b,a);
return 0;
}

Mod. lisäsi kooditagit

Jokotai [11.10.2010 21:35:49]

#

Apumuuttuja on tavallinen muuttuja, jota käytetään avustamiseen. Esimerkiksi, jos haluaa suorittaa jonkin asian aa kertaa kajoamatta siihen, voi aan arvon tallentaa muuttjaan, jota käytetään luupissa ja jota vähennetään joka kierroksella. Tuossa koodissa tmp ei taida olla tarpeellinen, riippuen tietenkin ajoympäristöstä ja kohteesta johon ohjelma tehdään.

Teuro [11.10.2010 21:36:34]

#

No ainakaan siinä ei ole mitään tolkkua, koska jokainen scanf rivi ylikirjoittaa aina edellisen tmp muuttujan sisällän. Toisaalta sitä ei taideta käyttää missään vaiheessa lukemisen jälkeen, joskaan en ole varma, koska et ole lisännyt kooditageja, enkä jaksa lukea koodia ilman sisennyksiä.

Jokotai [11.10.2010 21:39:01]

#

Teuro kirjoitti:

No ainakaan siinä ei ole mitään tolkkua, koska jokainen scanf rivi ylikirjoittaa aina edellisen tmp muuttujan sisällän. Toisaalta sitä ei taideta käyttää missään vaiheessa lukemisen jälkeen, joskaan en ole varma, koska et ole lisännyt kooditageja, enkä jaksa lukea koodia ilman sisennyksiä.

Se saattaisi olla enterinlukija. Jos ajoympäristön malli olisi sellainen, joka ottaa muuttujaan suoraan syötteestä, eikä puskurin kautta.

Grez [11.10.2010 21:39:51]

#

Teuro kirjoitti:

koska et ole lisännyt kooditageja, enkä jaksa lukea koodia ilman sisennyksiä.

Ei siinä ole sisennyksiä muutenkaan, eli ei pelkästään kooditagien puutteesta johdu.

Teuro kirjoitti:

No ainakaan siinä ei ole mitään tolkkua, koska jokainen scanf rivi ylikirjoittaa aina edellisen tmp muuttujan sisällän. Toisaalta sitä ei taideta käyttää missään vaiheessa lukemisen jälkeen

Jostain syystä koodaaja on halunnut lukea kaksi arvoa, mutta ei aio käyttää jälkimmäistä arvoa mihinkään. Käytännössä siis ohjelma lukee joka toisen merkin.

Jokotai [11.10.2010 21:45:09]

#

Ettei tule sekaannusta esitän villin veikkauksen: Kirjoitin samaan aikaan kuin Grez.

Metabolix [11.10.2010 22:53:25]

#

tmp = temporary = väliaikainen. Tätä nimeä käytetään yleisesti muuttujille, joissa on joko täysin merkityksetön arvo (kuten tuossa: eihän muuttujan arvoa edes käytetä!) tai jokin välitulos, jota käytetään melkein heti kohta eikä tarvita enää myöhemmin.

Tuossa ohjelmassa scanf-funktiolla luetaan aina kaksi merkkiä, joista aina ensimmäistä (a, b, c) käytetään myöhemmin mutta toista (tmp) ei enää tarvita. Muuttuja on tuossa tarpeen, koska ilman sitä scanf-funktio tallentaisi jälkimmäisen arvon jonnekin aivan väärään paikkaan ja ohjelma ehkä kaatuisi.

Toisaalta apumuuttujan käyttö tuossa kertoo, ettei koodin kirjoittaja tunne scanf-funktiota kovin hyvin: jos formaattina olisikin "%c%*c", jälkimmäistä merkkiä ei tallennettaisi lainkaan eikä tmp-muuttujaa siis tarvittaisi. Koska tarkoitus on ilmiselvästi lukea aina yksi kirjain ja sitä seuraava rivinvaihtomerkki, olisi vielä parempi käyttää formaattia " %c", joka lukee ensin tyhjät pois ja sitten sen yhden kirjaimen.

Vastaus

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

Tietoa sivustosta