| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Keskustelut - C/C++ - lcc-win32 kääntäjäjormamietti 16:13 18.3.08 lcc-win32 kääntäjäni tulkitsee printf- tekstissä ääkköset väärin. Yritin merkistön kautta, se ei auttanut. Onko jotain tehtävissä, vai täytyykö tyytyä kirjoittamaan kuin ennenvanhaan: "tulo ja osamaara" ? JVM. editoitu: 16:42 18.3.08 thefox 16:36 18.3.08 Ongelma ei ole varsinaisesti kääntäjässä, vaan siinä, että käyttämäsi tekstieditorin (lcc-win32:n ide?) merkistö ei vastaa käyttämäsi terminaalin (cmd.exe?) merkistöä. Jos saat selville, mitä merkistöä terminaali käyttää niin voit vaihtaa tekstieditorin merkistön oikeaksi (jos tekstieditori vaihtamista tukee). EDIT: cmd.exen käyttämä merkistö taitaa olla "Code page 437": http://en.wikipedia.org/wiki/Code_page_437 jormamietti 18:26 18.3.08 En löytänyt sellaista ruutua, jossa tekstieditorin merkistöä olisi voinut vaihtaa. JVM jormamietti 18:40 18.3.08 Vai onko kysymys linkerin asetuksista ? Kirjoitettaessa 'sorsaa' editorilla tulevat ääkköset oikein, mutta käännöksen jälkeen ne ovat muuttuneet. Linkerin asetuksista en löydä koodisivuja. JVM weicco 19:10 18.3.08 Linkkeri ei ota enää moiseen kantaa. thefox 00:03 19.3.08 Ja kantaa ei ota myöskään kääntäjä. Toki on mahdollista että käyttämäsi tekstieditori ei tue merkistön vaihtoa. Mutta teorian voit todeta oikeaksi esim. muokkaamalla lähdekooditiedostoa komentorivillä DOS-pohjaisella EDIT-ohjelmalla. jormamietti 08:39 19.3.08 Meneepä vaikeaksi, olen jo kerennyt unohtaa DOS:in ja EDIT:in. JVM weicco 09:25 19.3.08 Käyhän Notepadikin tiemmä. Sehän antaa ainakin XP:ssä vaihtaa charsettiä, joskin valikoima on hieman suppea. Voisin nopeasti tehdä .NET sovelluksen, joka antaa tallentaa millä charsetillä tahansa mikä nyt koneesta sattuu löytymään. jormamietti 12:15 19.3.08 Tämä tulostaa ison ja pienen ä:n ja Ö:n oikein. JVM for( i = 0; i < 10; i++ ) { printf( " Anna merkki " ); c = getchar(); printf( "Merkki on " ); putchar(c); printf( "\n" ); } Rytmis 12:23 19.3.08 Totta kai tulostaa kun syötät sen merkin siitä samasta konsolista johon se tulostetaan, jolloin merkistö on sama. editoitu: 14:10 19.3.08 weicco 14:09 19.3.08 Siis jos olet kirjoittanut koodin enkoodauksella A ja esität sitä enkoodauksella B se menee tietty sekaisin. Eli siis editorisi tallentaa teksin A:lla, mutta konsoli tulostaa sen B:llä. Kääntäjä/linkkeri ei ota tuohon kantaa. Ne vain puuppaavat tekstit enkoodauksella A ajettavaan binääriin. Eli sinun pitää jollain ilveellä saada koodisi kirjoitettua enkoodauksella B. Hae jostain joku ilmainen editori joka osaa tallentaa eri enkoodauksilla ja avaa koodisi sillä ja tallenna ne oikealla enkoodauksella. Tämän jälkeen käännä koodi vaikka varmuuden vuoksi komentoriviltä, niin koodieditorisi ei pääse sitä sotkemaan välissä. Toinen vaihtoehto olisi enkoodata tekstit uudestaan "lennosta". Eli ennen printf kutsua muunnat tekstin oikeaan charsettiin. En ole aivan varma miten tuo tapahtuu... Ehkä kutsumalla TranslateCharsetInfo. Tai sitten voit myös vaihtaa konsolin charsetin vastaamaan editoriasi kutsumalla SetConsoleOutputCP:tä (kannattaa varmaan sitten kutsua kanssa SetConsoleCP:tä). Katso MSDN:stä mitä nuo funkkarit tekee: http://msdn2.microsoft.com/en-us/library/default.aspx EDIT: Enpä muista milloin olisi tullut viimeksi tilanne eteen jossa en tiedä miten jokin tehdään Windowsissa :) jormamietti 11:44 20.3.08 Olen saanut parikin varoitusta, että älä koske ääkkösiin, voivat muutkin lcc: n käyttämät erikoismerkit mennä sekaisin. Koska en tee ohjelmia kaupalliseen käyttöön, vaan omaksi huvikseni, lienee helpoin tapa tyytyä kirjoittamaan äö:n tilalle ao, JVM Ztane 14:22 20.3.08 Käytä oikeaa käyttistä jossa kaikki on aina unicodea... feenix 15:21 20.3.08 Ztane kirjoitti: Käytä oikeaa käyttistä jossa kaikki on aina unicodea... Mutta kysyjällähän oli juuri Windows alla (enkä usko että 9x-sarjalainen) ja se on se ainoa tietämäni käyttis jossa kaikki on unicodea, paitsi jos tekee ohjelman joka ei halua/osaa käyttää unicodea. OS X ja Linux eivät esimerkiksi tue unicodea oikein, mutta kerro ihmeessä mikä käyttis on sellainen jossa kaikki on aina unicodea? weicco 08:37 21.3.08 NT on ollut unicodea jo iät ja ajat. Ztanen trollaus epäonnistuu surkeasti nyt. editoitu: 11:57 21.3.08 Jari_Kettunen 11:53 21.3.08 Seuraavalla koodilla saat konsoliin ääkköset. Muutos ei toimi konsolin rasteri fonteilla mutta vaihda oletusfontiksi Truetype-fontti "lucida console" niin ääkköset näkyy oikein. C |
![]() Haku
|