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
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.
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ä.
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.
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.
Ettei tule sekaannusta esitän villin veikkauksen: Kirjoitin samaan aikaan kuin Grez.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.