Hur få C att acceptera å, ä, ö?

Permalänk
Medlem

Hur få C att acceptera å, ä, ö?

Leker lite med C programmering.

char c;

c = 'x'; där x kan vara alla tecken på tangentbordet UTOM å, ä, ö

kompilatorn säger: "warning: multi-character character constant [-Wmultichar]"

så hur fixar man detta?

Permalänk
Medlem

Fungerar flaggan -fexec-charset=cp850?

Visa signatur

Ryzen 7800X3D, be quiet! pure rock 2, RTX 4070 Ti Super, Corsair 32GB 6000MHz CL36, Corsair TX850M

Permalänk
Medlem
Skrivet av Kladdpapper:

Fungerar flaggan -fexec-charset=cp850?

Hur används den?

Permalänk
Hedersmedlem
Skrivet av jookeer:

Hur används den?

Hur kompilerar du nu? Den läggs till kompilatorns argument. Antar att du kör någon utvecklingsmiljö eller liknande? Isåfall är det någonstans i inställningarna. Nämn vilken så kan nog folk hjälpa till
Kör man kommandorad är det bara lägga till den.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av jookeer:

Leker lite med C programmering.

char c;

c = 'x'; där x kan vara alla tecken på tangentbordet UTOM å, ä, ö

kompilatorn säger: "warning: multi-character character constant [-Wmultichar]"

så hur fixar man detta?

En char (character) är vanligtvis en byte stor. En byte kan representera 2^8 = 256 olika värden, alltså 256 olika tecken.

Om du kan få kompilatorn att använda en teckenkodning där å, ä, ö (och eventuellt Å, Ä, och Ö) är kodat med ett värde mellan 0-255 så kan din char representera ditt tecken och du löser problemet. @Kladdpapper föreslår just detta; att försöka få kompilatorn att använda Windows Code page 850.

Du borde likväl kunna ersätta ditt tecken med en så kallad escape sequence, då skriver du istället det värde som motsvarar det tecken du vill visa:

char a = '\x86'; /* å enligt Windows code page 850 */ char b = '\xE5'; /* å enligt Windows code page 1252 - vanligare(?) än 850 */

Observera att båda förslag förutsätter att kommandotolken i Windows är inställd på att använda motsvarande eller kompatibel teckenkodning, dvs. Windows code page 850 eller 1252.

Edit:
Ett annat alternativ kan vara att spara din kod teckenkodat som UTF-16, sen köra med wchar_t och wprintf istället.

W står för wide och syftar alltså på att datatypen är bredare, alltså består den av fler bitar och kan representera fler tal. wchar_t kan ha lite olika storlekar, men på Windows borde den vara 16-bitar och därmed funkar perfekt med UTF-16 (som använder just 16 bitar för att representera åtminstone BMP i Unicode).

Eftersom wchar_t är en annan datatyp än char så måste du använda en annan funktion för att skriva ut texten; wprintf istället för printf.

För att kompilatorn ska förstå att strängen ska sparas som wchar_t så måste strängen föregås av prefixet L.

#include <wchar.h> int main(int argc, char *argv[]) { wprintf(L"åäöÅÄÖ"); return 0; }

Permalänk
Permalänk
Medlem
Skrivet av jookeer:

Råder dig starkt att ladda hem Visual Studio https://visualstudio.microsoft.com/vs/community/.

Permalänk