Avatar billede benjams69 Nybegynder
17. juni 2003 - 23:32 Der er 24 kommentarer og
1 løsning

charset til Ansi C

Er ved at kreere et programel i Ansi C. Det er uden GUI - altså bare normalt promt vindue... Programmet skal skrive nogle tegn ud, men jeg kan ikke få den til at skrive æ ø og å - det bliver bare til [].
Er der ikke et charset til den slags?!
Avatar billede bertelbrander Novice
18. juni 2003 - 00:11 #1
Det afhænger af hvilken platform du kompilerer på og hvilken kompiler du bruger!
Du kan prøve at studere output fra følgende program og så bruge de ascii værdier der passer på din kompiler.
<code>
#include <stdio.h>

int main(void)
{
  int i;
  for(i = 32; i < 256; i++)
    printf("%c %d\n", i, i);

  return 0;
}
</code>
Avatar billede bertelbrander Novice
18. juni 2003 - 00:15 #2
Bliv ikke overrasket hvis dine æøå'er ser sjove ud i din editor.
Jeg er bange for at det slet ikke er muligt at bruge æøå i et program hvis man skal overholde C-standarden (men lad ikke det stoppe dig).
Avatar billede benjams69 Nybegynder
18. juni 2003 - 01:10 #3
hehe takker - jeg tester da lige i morgen en gang...
Avatar billede arne_v Ekspert
18. juni 2003 - 07:53 #4
Skriver du koden i et WIndows program og kører i et console windows (DOS box) ?
Avatar billede benjams69 Nybegynder
18. juni 2003 - 14:02 #5
Koden bliver skrevet i M$ Visual Studio 6.0 - og det kører via et promtvindue ja...
Avatar billede arne_v Ekspert
18. juni 2003 - 14:22 #6
Jeg postede noget kode i http://www.eksperten.dk/spm/350473
som kan konvertere fra Windows (ISO-8859-1) til
DOS (CP 850).
Avatar billede benjams69 Nybegynder
21. juni 2003 - 04:21 #7
jamen den vil jeg da lige teste - kan dog først på mandag....
Avatar billede benjams69 Nybegynder
23. juni 2003 - 10:51 #8
arne_v: Det ville sgu ikk virke....

bertelbrander: det virker glimrende, og jeg kan også se æøåÆØÅ, MEN når jeg så sætter det ind i min egen kode, virker det ikke?!
fx:
<code>
#include<stdio.h>
#define oe '\237' //fundet ud fra din kode :D

main()
}
  printf("%c\n", oe);
}
</code>

men jeg kan godt hvis jeg fx skriver:

<code>
#include<stdio.h>

main()
{
  int i = 237;
  printf("%c\n", i);
}
</code>

Hvad er den forskellen reelt?!
btw - smid da lige et svar så du ka' få nogle points....
Avatar billede arne_v Ekspert
23. juni 2003 - 10:55 #9
Mystisk. Den kode plejer altså at virke.
Avatar billede arne_v Ekspert
23. juni 2003 - 10:56 #10
Forklaring på forskellen:

'\237' = oktal 237
237 = decimal 237
Avatar billede arne_v Ekspert
23. juni 2003 - 10:56 #11
Måske:

#define oe 237
Avatar billede arne_v Ekspert
23. juni 2003 - 11:00 #12
Du bruger vel ikke CodePage 865 i stedetfor 850 ?

(så skal du have en anden tabel)
Avatar billede benjams69 Nybegynder
23. juni 2003 - 11:43 #13
hov - vil lige gøre opmærksom på at oe ikke kan bruges - da den fungerer som 'constant' (ved ikke lige hvorfor...)
Avatar billede benjams69 Nybegynder
23. juni 2003 - 14:32 #14
CodePage 865 i stedetfor 850 <---?! har ingen anelse om hvad det er :D
mht '\237' bruger de i Ansi C (min bog anyway) dog ikke som eksempel... Jeg prøvede også #define oe 237 men så kom den bare ud som integer værdien.
Avatar billede arne_v Ekspert
23. juni 2003 - 14:39 #15
Hvis du i en DOS box skriver:
  MODE
får du at vide hvilken codepage du bruger (437=engelsk,865=dansk,850=vesteuropæisk).
Avatar billede arne_v Ekspert
23. juni 2003 - 14:40 #16
'\237' er helt legal C.

det er bare ikke 237 men 159 decimalt.

Og om der kommer integer værdi eller tegn ud har vel ikke
noget med hvordan det angives men om man bruger %c eller %d.
Avatar billede benjams69 Nybegynder
23. juni 2003 - 14:43 #17
437
forresten kan jeg godt skrive #define oe 237 i M$ visual studio 5, men IKKE i version 6?! Tror jeg er kommet til at forvirre mig selv mere end højst nødvendigt. Ydermere kan oe også bruges som variabel i version 5 (men ikke i version6)
Mikroblød er godt nok stenet once in a while...
Avatar billede arne_v Ekspert
23. juni 2003 - 14:44 #18
Prøv evt. at bygge og køre dette lille program:

#include <stdio.h>

#define a 237
#define b '\237'
#define c 159
#define d '\355'

int main()
{
  printf("%d = %c\n",a,a);
  printf("%d = %c\n",b,b);
  printf("%d = %c\n",c,c);
  printf("%d = %c\n",d,d);
}
Avatar billede benjams69 Nybegynder
23. juni 2003 - 14:48 #19
den første og sidste viser det den skal... Men hvori ligger forskellen (ja udover at tallene er forskellige)?! Er der et system eller?!
Avatar billede arne_v Ekspert
23. juni 2003 - 15:08 #20
Ja.

237 decimal = 355 octal

237 octal = 159 decimal
Avatar billede benjams69 Nybegynder
23. juni 2003 - 15:18 #21
hvordan er det lige den omregning er?!
Avatar billede arne_v Ekspert
23. juni 2003 - 15:26 #22
decimal = 10 tals system
octal = 8 tals system

2*100+3*10+7 = 3*64+5*8+5
Avatar billede benjams69 Nybegynder
23. juni 2003 - 15:35 #23
takker - smid lige et svar, så får i begge lidt points :D
når den anden altså også smidder et that is
Avatar billede arne_v Ekspert
23. juni 2003 - 15:40 #24
svar
Avatar billede bertelbrander Novice
23. juni 2003 - 23:17 #25
Giv blot pointene til arne_v, det er vist mest ham der har hjulpet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester