/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Danske bogstaver
Fra : Dorte Klerke


Dato : 07-08-03 22:31

Hej
Jeg har nedenstående funktion i mit hangman spil, jeg er ved at lave, men
hvordan får jeg den til at tjekke de danske bogstaver, der har koderne:

\x9B = ø
\x9D = Ø
\x91 = æ
\x92 = Æ
\x86 = å
\x8F = Å

[snip]
int GaetBogstav()
{
int ok=0;
printf("Indtast bogstav : ");
while(!ok) /* Loop indtil en ikke allerede indtastet char indtastes */
{
char a=toupper(Get1Char());
if(a=='0')
{
return 0; /* Signal til afslutning af spil */
}
else if(!isalpha(a) || !strchr(spil.alfabet,a)) /* Tjek om det
indtastede er bogstav
og ikke allerede er
gættet på */
printf("Indtast et nyt bogstav: ");
else
{
subsbogstav(a,spil.alfabet);
int j=0,i;
for(i=0;i<=spil.ord.laengde;i++)
if(a==spil.ord.ordet[i])
{
spil.ord.Gaet[i]=1; /* Søg efter det indtastede bogstav i ordet og
sæt
forekomster til 'gættet' */
++j; /* j opfattes som bool, der angiver om
bogstavet er i ordet */
}
if(!j)
{ /* Hvis bogstavet IKKE er i ordet... */
--spil.ord.AntalGaet; /* Fratræk et gæt */
}
else
{
spil.score=500*j+spil.score; /* 500 point for hver forekomst af
korrekt bogstav */
}
return 1;
}
}
}

[snip]


Desuden: Hvis jeg bruger koderne for danske bogstaver i windows, men så
senere compiler på en unix server, sker der så en ændring, altså kan unix
også forstå koderne for æøå?

Dorte



 
 
Bertel Lund Hansen (07-08-2003)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-08-03 22:52

Dorte Klerke skrev:

>Jeg har nedenstående funktion i mit hangman spil, jeg er ved at lave, men
>hvordan får jeg den til at tjekke de danske bogstaver, der har koderne:

Velkommen til The Wonderful World of Computing with Danish
Letters, vol. 2893 chapter 198.

>\x9B = ø
>\x9D = Ø
>\x91 = æ
>\x92 = Æ
>\x86 = å
>\x8F = Å

Du render ind i at de indbyggede funktioner går ud fra at æ, ø og
å *ikke* er bogstaver. Måske er der noget med at man kan
indstille C til at være dansk, men det har jeg ikke prøvet (det
er vist noget med locale).

> char a=toupper(Get1Char());

Den 'upper' ikke æøå.

> else if(!isalpha(a) || !strchr(spil.alfabet,a))

Og isalpha() siger nej til dem.

Selv bruger jeg konstante værdier. Ofte sammensætter jeg mit eget
alfabet:

const char alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ";

og bruger noget med: if (strchr(alfabet,tegn)) printf("Hurra!");

Det kan kombineres med en anden streng med små bogstaver, og så
kan upper omskrives til

char *pos;
if (strchr(alfabet_lille,tegn)) {
pos=strchr(alfabet_lille,tegn);
tegn=*(alfabet_stor+(pos-alfabet_lille));
}

Det kan også laves med nummerering i stedet for en pointer. En
switch-ckonstruktion kan også klare det. Den fylder meget i
koden, men den kører effektivt.
switch (tegn) {
case 'a': return 'A';
case 'b': return 'B';
osv.

>Desuden: Hvis jeg bruger koderne for danske bogstaver i windows, men så
>senere compiler på en unix server, sker der så en ændring, altså kan unix
>også forstå koderne for æøå?

Jeg ved ikke så meget om Unix.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Bertel Brander (07-08-2003)
Kommentar
Fra : Bertel Brander


Dato : 07-08-03 23:17

Dorte Klerke wrote:
> Hej
> Jeg har nedenstående funktion i mit hangman spil, jeg er ved at lave, men
> hvordan får jeg den til at tjekke de danske bogstaver, der har koderne:
>
> \x9B = ø
> \x9D = Ø
> \x91 = æ
> \x92 = Æ
> \x86 = å
> \x8F = Å
>
Dette kan være koderne for æøåÆØÅ i windows, det er måske de samme
værdier for en windows-konsol, men det er ikke sikkert. DVS. du
kan ikke være sikker på at hvis du skriver:
printf("æøåÆØÅ\n"); i din editor, at outputet vil være det forventede
når du læser det i en konsol (det er noget med forskellige code-pages).
> Desuden: Hvis jeg bruger koderne for danske bogstaver i windows, men så
> senere compiler på en unix server, sker der så en ændring, altså kan unix
> også forstå koderne for æøå?
Måske.

/b


Niels Dybdahl (08-08-2003)
Kommentar
Fra : Niels Dybdahl


Dato : 08-08-03 07:32

> Jeg har nedenstående funktion i mit hangman spil, jeg er ved at lave, men
> hvordan får jeg den til at tjekke de danske bogstaver, der har koderne:
> \x9B = ø
> \x9D = Ø
> \x91 = æ
> \x92 = Æ
> \x86 = å
> \x8F = Å
> Desuden: Hvis jeg bruger koderne for danske bogstaver i windows, men så
> senere compiler på en unix server, sker der så en ændring, altså kan unix
> også forstå koderne for æøå?

De koder du har angivet gælder for de såkaldte 'codepages' CP850 og CP865,
som anvendes af MS-DOS. Jeg tvivler på at de bruges andre steder. Selv
Windows anvender andre koder, så dit program vil ikke en gang virke, hvis du
brugte de ovennævnte koder og det blev compileret med de koder som
Windows-program.

Windows bruger CP1252 og Unicode (16 bits per bogstav), som er udbygninger
på standarderne ISO8859-1 og ANSI, så disse fire har alle æøå på de samme
koder. Linux er på vej over til at bruge UCS tegnsættet (32 bits per
bogstav) kodet som UTF8 (8 til 48 bits per bogstav). UCS har ligeledes samme
koder for æøå som CP1252, Unicode, ISO8859-1 og ANSI, men UTF8 koder dem
ikke som en byte, men som to efter hinanden.

De metoder som Bertel har beskrevet er udemærkede til at få programmet til
at virke på dansk på ikke-UTF8-systemer. Programmet skal skrives på en
væsentlig anderledes måde for at virke på nyere Linux-systemer.

Niels Dybdahl




Kent Friis (08-08-2003)
Kommentar
Fra : Kent Friis


Dato : 08-08-03 09:07

Den Fri, 8 Aug 2003 08:31:49 +0200 skrev Niels Dybdahl:
>> Jeg har nedenstående funktion i mit hangman spil, jeg er ved at lave, men
>> hvordan får jeg den til at tjekke de danske bogstaver, der har koderne:
>> \x9B = ø
>> \x9D = Ø
>> \x91 = æ
>> \x92 = Æ
>> \x86 = å
>> \x8F = Å
>> Desuden: Hvis jeg bruger koderne for danske bogstaver i windows, men så
>> senere compiler på en unix server, sker der så en ændring, altså kan unix
>> også forstå koderne for æøå?
>
>De koder du har angivet gælder for de såkaldte 'codepages' CP850 og CP865,
>som anvendes af MS-DOS. Jeg tvivler på at de bruges andre steder. Selv
>Windows anvender andre koder, så dit program vil ikke en gang virke, hvis du
>brugte de ovennævnte koder og det blev compileret med de koder som
>Windows-program.
>
>Windows bruger CP1252 og Unicode (16 bits per bogstav), som er udbygninger
>på standarderne ISO8859-1 og ANSI, så disse fire har alle æøå på de samme
>koder. Linux er på vej over til at bruge UCS tegnsættet

RedHat er.

Andre distributioner kører stadig iso8859-1.

Mvh
Kent
--
Hvis man ikke kan lide klassisk musik, er det sandsynligvis fordi
lydkvaliteten er for dårlig. Klassisk musik kræver et godt anlæg.

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste