Umlaute in C
-
Hi(gh)!
Und weiter geht es mit ERLENKÖTTER, Helmut: C - Programmieren von Anfang an... auf Seite 60 ist in den erklärenden Anmerkungen zum Programmskript "bspl0019.c" zu lesen, dass die (in ctype.h enthaltenen) Funktionen toupper() und tolower() mit Umlauten (das große ẞ gab es damals noch nicht) nicht funktionieren... das fand ich interessant und wollte es dann gleich mal ausprobieren:
#include <stdio.h> #include <ctype.h> main() { char eingabe; printf("\nGeben Sie ein deutsches Sonderzeichen als Großbuchstabe ein (Umlaut oder ẞ): "); scanf("%c",&eingabe); if ( !(eingabe =='Ä' || eingabe=='Ö' || eingabe=='Ü' || eingabe=='ẞ')) printf("Dies war leider kein passendes Zeichen!\n"); else { eingabe=tolower(eingabe); printf("\nIhre Eingabe als Kleinbuchstabe: %c\n",eingabe); } }
Beim Komplieren (im C90-Modus) wirft gcc vier Warnmeldungen (jeweils mit unterschlängeltem Sonderzeichen):
warning: multi-character character constant [-Wmultichar]
12 | if ( !(eingabe =='Ä' || eingabe=='Ö' || eingabe=='Ü' || eingabe=='ẞ'))und wenn ich das Programm dann starte, wird die if-Bedingung auch bei Eingabe von Ä, Ö, Ü oder ẞ nie falsch!
Multi-character constant: klar, das sind Zeichen, die anders als Standard-ASCII mit mehr als einem Byte kodiert sind... was hat es mit dem Kommandozeilen-Switch -Wmultichar auf sich?
Bis bald im Khyberspace!
Yadgar