toupper
-
Wenn die Zeichen bei der Eingabe auf dem Terminal stehen, kann man sie auch ausgeben.
Zeig mal dein komplettes Programm. Mittlerweile hast du ja an verschiedenen Stellen Änderungen.
-
Auf modernen Systemen wird UTF-8 (Unicode) verwendet. Dabei werden Zeichen außerhalb des ASCII-Raumes mit mehreren Bytes (chars) dargestellt. Daher ist ein einfaches toupper nicht mehr möglich. Übrigens der Unicode-Standard enthält einen Algorithmus für richtiges "Case-Mapping".
-
DirkB schrieb:
Zeig mal dein komplettes Programm. Mittlerweile hast du ja an verschiedenen Stellen Änderungen.
#include <stdio.h> #include <stdlib.h> #include <string.h> void tuopper_(char *eingabe){ int i; for(i=0;i<=strlen(eingabe);i++){ //Rest if(eingabe[i] >96 && eingabe[i]<123){ eingabe[i]-=32; } else if(eingabe[i]==-4){ //ü->Ü eingabe[i]=-36; } else if(eingabe[i]==-28){ //ä->Ä eingabe[i]=-60; } else if(eingabe[i]==-10){ //ö->Ö eingabe[i]=-42; } } } int main(){ char eingabe[50]; printf("Geben sie einen Buchstaben oder einen ganzen Satz ein.\n"); fgets(eingabe,50,stdin); tuopper_(eingabe); printf("\n%s\n",eingabe); system("PAUSE"); return 0; }
-
Welches System (Windows/Linux/? )nutzt du?
Welche Version?Bei mir kommt kommt bei Windows 7
ü = -127
Ü = -102
ö = -108
Ö = -103
ä = -124
Ä = -114raus.
Wenn ich die Werte einsetzt klappt das auch.
Deine Schleife läuft um Eins zu weit. Es reicht auf kleiner zu testen:
i<strlen(eingabe)
In C testet man aber i.A gleich auf den Stringterminator:i!='\0'
-
DirkB schrieb:
In C testet man aber i.A gleich auf den Stringterminator:
i!='\0'
Müsste dann aber richtig lauten: eingabe[i]!='\0'
Statt eingabe[i] kannst du in deinem Fall auch *eingabe verwenden. Das Inkrementieren am Ende jedes Schleifendurchlaufs wird mit eingabe++ erreicht und damit kann auf die Variable i verzichtet werden.
Zu Beginn deiner Funktion könnte sicherheitshalber noch die Prüfung von eingabe auf NULL erfolgen.
-
Ups!
Schäm.
-
DirkB schrieb:
Welches System (Windows/Linux/? )nutzt du?
Welche Version?Bei mir kommt kommt bei Windows 7
ü = -127
Ü = -102
ö = -108
Ö = -103
ä = -124
Ä = -114raus.
Wenn ich die Werte einsetzt klappt das auch.
Habs jetzt mal auf meinem Home-PC(Win7) ausprobiert und dort erhalte ich auch diese Zahlen und es klappt.
Zuvor hatte ich es auf meinem Laptop probiert(Win8.1), dort hatte ich die anderen ZahlenThx
-
Warum benutzt Du nicht die Zeichen, also etwa
if(eingabe[i]=='ü') //ü->Ü
eingabe[i]='Ü';
Das hat den Vorteil, dass es mit allen Codes funktioniert.
-
Das hat den Nachteil, dass es gerade nicht mit allen Codes funktioniert.
-
Wenn du MS visual Studio hast, solltest du dir den Menüpunkt DATEI -> Erweiterte Speicheroptionen... anschauen. Dort sind alle Zeichencodierung aufgeführt in denen der Quelltext gespeichert werden kann.
Für die Windows Console ist der Zeichensatz in der Regel Codepage 850:
http://de.wikipedia.org/wiki/Codepage_850
Ä ist dort Hex 8E -> Dez -114/142