Saisko jotenkin tästä arvon "400" jos laitan
int a,b,c; scanf("%d %d %d", &a, &b, &c); // annetaan kolme väriä "yellow black brown" yellow = 4 black = 0 brown = 1 // värien arvot c = // nollien määrä printf("%d%d%d",a,b,c); // tulostaa värikoodin arvon
tämä ei anna arvoa 400 mutta onko se jotenkin tohon tapaan?
No ei saa tuota kyllä millään. Tuossahan luetaan a, b, c muuttujiin jotain lukuja, jotka tulkitaan int luvuiksi. Sen jälkeen on virheellinen merkkijono literaali, jolle ei ole tyyppiä. Implisiittisesti siitä tulisi char* osoitin, mutta C ei tue implisiittistä muunnosta. Lopuksi on jotain määrittelemättömiä muuttujia, jotka tulkitaan int luvuiksi. Viimeisimpänä c =, josta pitäisi tulla virhe, että odotetaan ; -merkkiä.
Mulla on tässä koodissa muuttaa ohmit värikoodiksi.
En tiiä tulisko se samalla tavalla, mutta tietysti eri jutut tonne.
char colors[10][7]= { "black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "gray", "white" }; int value_1, value_2, value_3=0; float R, temp; system("cls"); printf("Anna resistanssi ohmeina:"); scanf("%f", &R); temp=R; while(temp>=100.0) { temp=temp/10.0; ++value_3; } value_1=(int)(temp/10.0); value_2=(int)(temp-10.0*value_1); printf("Varikoodi on: %s - %s - %s.", colors[value_1], colors[value_2], colors[value_3]); }
Tarkoitatko nyt sitä että käyttäjää pyydetään syöttämään kolme väriä merkkijonona ja ohjelma muuttaa sen numeroksi? Eli jos käyttäjä syöttää vaikka tuon "yellow black brown", niin ohjelman tulisi suoltaa ulos "401"?
Jos noin, niin sinun täytyy skannata syöte merkkijonona, eikä kokonaislukuna (%s eikä %d). Ja luonnollisesti muuttujienkin on oltava samalla merkkijonoja. Nähtävästi talukossa merkkijonot ovat char[7], niin sitä tyyppiä olisi hyvä skannatakin. Siis:
char a[7], b[7], c[7]; scanf("%s %s %s", a, b, c);
Sitten etsit merkkijonojen paikan taulukosta vaikka for-silmukan ja strncmp:n avulla.
Torgo kirjoitti:
Tarkoitatko nyt sitä että käyttäjää pyydetään syöttämään kolme väriä merkkijonona ja ohjelma muuttaa sen numeroksi? Eli jos käyttäjä syöttää vaikka tuon "yellow black brown", niin ohjelman tulisi suoltaa ulos "401"?
Jos noin, niin sinun täytyy skannata syöte merkkijonona, eikä kokonaislukuna (%s eikä %d). Ja luonnollisesti muuttujienkin on oltava samalla merkkijonoja. Nähtävästi talukossa merkkijonot ovat char[7], niin sitä tyyppiä olisi hyvä skannatakin. Siis:
char a[7], b[7], c[7]; scanf("%s %s %s", a, b, c);Sitten etsit merkkijonojen paikan taulukosta vaikka for-silmukan ja strncmp:n avulla.
Mulla on tuo ohmeista värikoodiksi ja toimii.
Ja nyt ongelma tuli tossa että värikoodista ohmeiksi.
- pyydetään kolme väriä. Kolme noista väreistä mitä nyt on saatavilla. arvot ovat samat kuin oikeissa värikoodeissa.
- muuntaa värikoodin ohmeiksi esim. yellow black brown on ohmeina 400.
kolmas väri kertoo nollien määrän esim. brown on 1 eli yksi 0 jos kolmas väri oisi vaikka yellow niin nollia olisi neljä 0000.
Kuten Teuro sanoi: lue käyttäjän syötteet teksteinä (%s ja char-taulukko) ja etsi ne värilistasta for-silmukalla. Oikea numero on se, jonka kohdalla strcmp-funktio tunnistaa tekstit samoiksi. Jos silmukan ymmärtäminen tuntuu vaikealta, voit tehdä muunnoksen aluksi (tietysti opettelet myöhemmin paremmin) myös rumalla toistolla:
int numero(const char *vari) { if (strcmp(vari, "black") == 0) return 0; if (strcmp(vari, "brown") == 0) return 1; /* ... */ return -1; } /* if (numero(vari) == -1) printf("Virhe!\n"); */
Sain toimimaan.
kiitoksia!
Aihe on jo aika vanha, joten et voi enää vastata siihen.