Groß in Kleinbuchstaben umwandeln --- Windows

Dann eben einfacher erklärt:
Alle Buchstaben, die du anzeigen kannst, sind durchnummeriert.
Zum Beispiel ein kleines a ist 97, b ist 98, ein großes A ist 65, B 66, die Ziffer 0 ist 48, 1 ist 49, Leerzeichen 32 usw...

Wenn du zwei Buchstaben vergleichen willst, wird in Wirklichkeit nur die Nummer verglichen.

Das Problem an der Sache ist: Grafische Programme in Windows (also auch Visual Studio, oder wo auch immer du deinen Quelltext schreibst) haben ein anderes Nummernsystem als die Konsole in Windows.

Die englischen Buchstaben (also A-Z ohne ÄÖÜß) haben in beiden Nummerierungen die selben Nummern.
Die deutschen Umlaute aber nicht.

Wenn du jetzt also ein ü in dein printf im Visual Studio (etc) schreibst und kompilierst, wird die ü-Nummer von der Grafikseite verwendet.
Wenn das aber in der Konsole ausgegeben wird kommt das Zeichen raus, das bei der Konsole an dieser Nummer steht. Leider kein ü.
Dasselbe gilt, wenn du ein ü in der Konsole eingibst (getchar, scanf...) und mit einem reinkompilierten Grafik-ü vergleichst.
Verschiedene Nummern, nicht gleich.

Ist es so verständlicher?

Gruß
 
Nun habe ich den Code etwas angepasst, um den Wert 1 auch für die Ü's zurückzuliefern und zu übergeben, aber sie werde dennoch nicht umgewandelt.
Hast du das überprüft, ob das auch wirklich der Fall ist? Schreib dir einen Testtreiber, teste deinen Code!

Die anderen Funktionen solltest du natürlich auch testen, islower_dt sollte 1 für 'ü' zurückgeben!
Int wurde umgebessert, "kleiner" Schönheitsfehler.
Du verwendest allerdings immer noch eine nicht initialisierte Variable und du überprüfst auch nicht den Rückgabewert von getchar.

Gruß
 
Zuletzt bearbeitet:
Zurück