Gå til innhold

ÆØÅ fungerer ikke


Anbefalte innlegg

Skrevet

Hallo.

 

Mitt lille c-dataprogram ber om input og bruker æ,ø og å, men jeg får ikke ut æøå på skjermen. hva kan/må jeg gjøre for å få til dette?

 

 

Takk :D

Videoannonse
Annonse
Skrevet (endret)

Det er som nevnt tegnsettet som er feil:

 

#include <windows.h>
#include <stdio.h>


int main(int argc, char *argv[], char *envp[] )
{
   const char* ansi = "æ, ø, å, Æ, Ø Å";
   char* oemStr = malloc(strlen(ansi) + 1);

   printf("ansi: %s\n", ansi);
   
   CharToOemA(ansi, oemStr);
   printf("oem:  %s\n", oemStr);
   fflush(stdout);

   free(oemStr);
}

 

Edit: eksemplet er for Windows

Endret av kjetil7
Skrevet
Det er som nevnt tegnsettet som er feil:

 

#include <windows.h>
#include <stdio.h>


int main(int argc, char *argv[], char *envp[] )
{
   const char* ansi = "æ, ø, å, Æ, Ø Å";
   char* oemStr = malloc(strlen(ansi) + 1);

   printf("ansi: %s\n", ansi);
   
   CharToOemA(ansi, oemStr);
   printf("oem:  %s\n", oemStr);
   fflush(stdout);

   free(oemStr);
}

 

Edit: eksemplet er for Windows

7511886[/snapback]

 

 

 

 

 

Takk for svaret, men jeg kom ikke helt i mål, kan du/dere hjelpe med resten?

 

 

 

Hvor hentet du dette fra, jeg får syntaksfeil (jeg måtte komentere bort linjen)?

CharToOemA(ansi, oemStr);

 

 

JEG FÅR ADVARSEL NÅR JEG KOMPILERER RESTEN AV PROGRAMMET:

bash-2.02$ gcc -g -o forum forum.c

forum.c: In function `main':

forum.c:19: warning: initialization makes pointer from integer without a cast

/cygnus/cygwin-b20/H-i586-cygwin32/i586-cygwin32/bin/ld: cannot open output file

forum.exe: Permission denied

collect2: ld returned 1 exit status

bash-2.02$

 

 

 

HER ER UTSKRIFTEN NÅR JEG KJØRER PROGRAMMET:

ansi: µ, °, Õ, ã, Ï, ┼

oem: ê&♠aê&♠a

 

 

Hva er feil?

Skrevet

Linker feilen du får, tror jeg kan være et resultat av at du kjører programmet mens du kompilerer. Dette kan ihvertfall føre til at linkeren ikke kan "open output file".

 

Det er den eneste feilen når du kompilerer der ihvertfall. Du får riktignok en warning, men dette er ikke en error.

Skrevet (endret)
Takk for svaret, men jeg kom ikke helt i mål, kan du/dere hjelpe med resten?

 

Hvor hentet du dette fra, jeg får syntaksfeil (jeg måtte komentere bort linjen)?

CharToOemA(ansi, oemStr);

 

HER ER UTSKRIFTEN NÅR JEG KJØRER PROGRAMMET:

ansi: µ, °, Õ, ã, Ï, ┼

oem: ê&♠aê&♠a

 

Hva er feil?

7523339[/snapback]

 

CharToOem er en funksjon som oversetter en string fra ANSI til OEM'et du kjører på (cmd.exe sitt charset).

 

Hvis du kommenterer den ut er hele poenget borte.

 

Testet koden som ble postet og den funker helt fint. En ting er vel at du bør caste til char* når du malloc'er.

 

Hvis du får syntax error på CharToOem linjen har du enten glemt å include windows.h eller så er det en feil i include_pathen din til compileren.

 

int main(int argc, char* argv[])
{
const char* ansi = "æ, ø, å, Æ, Ø Å";
char* oemStr = (char*)malloc(strlen(ansi) + 1);

printf("ansi: %s\n", ansi);
   
CharToOemA(ansi, oemStr);
printf("oem:  %s\n", oemStr);
fflush(stdout);

free(oemStr);
return 0;
}

Endret av Fangs78
  • 3 uker senere...
Skrevet (endret)

Eg erstatter bokstavene med desse tegna:

 

æ = \x91

ø = \x9b

å = \x86

Æ = \x92

Ø = \x9d

Å = \x8f

 

Lager først programmet, og så bruker eg "Søk og erstatt" funksjonen. Dei fleste editorer og tekstredigeringsprogram har denne funksjonen.

Bruker Dev-cpp (Ctrl + R). I notepad er det Ctrl + H. Ellers kan du finne den ut med å se opp oppgavelinjen i den editoren du bruker.

Dette funker heilt fint for meg.

Endret av gamma48
Skrevet

Den riktige måten å gjøre dette på er å bruke API-funksjonen CharToOem som vist over. Det du gjør kan betraktes som et hack.

 

Koden fungerer fint og kompilerer i både Visual C++ og GCC. Siden det her var et C-program regner jeg med at du lagrer kildekodefilen med *.c -endelse. Du trenger heller ikke en typecast fra malloc siden dette er C, og ikke C++.

 

Eksempel på kompilering av CharToOem.c med GCC:

 

gcc -Wall CharToOem.c -o CharToOem

 

Output:

ansi: µ, °, Õ, ã, Ï ┼
oem:  æ, ø, å, Æ, Ø Å

Skrevet

mmm

 

Vet dette kan være litt vanskelig å svelge ... men gode gammeldagse dos konsoll program, er kun for eksempler, test, opplæring.

 

Dette er fordi det med char set er så ymse på ymse platformer, og da kommer man ofte opp i konflikter her og der. Men C++ erjo laget for å benytte alskens biblioteker, og det blir jo det som er steget etter at man har pløyd de første par c++ bøkene...

 

hater det rotet med char set selv ....

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...