Umlaute einlesen
-
Aha, also 0x davor schreiben... hättest du auch gleich sagen können. Naja, es wird, es wird
Aber für mein Problem muss ich mir ja ne eigene Einlesefunktion basteln oder?
-
Aber irgendwie geht das doch nicht, ich dreh noch durch... Wenn ich folgendes Grundgerüst habe:
char ReadChar () { char c; c=getch(); if (c==umlaut) { ... und dann :confused: } return c; }
Was soll ich da dann machen?
-
Du musst natürlich wissen, welchen ASCII-Wert du einliest und welcher es dann eigentlich sein sollte.
Beispiel:
const unsigned char ae_ein = 100; const unsigned char ae_aus = 125; ... //Funktion zum Einlesen char * einlesen(char * eingabe, unsigned int max_lang) { ... unsigned char zeichen; char * pos = eingabe; ... //Zeichen einlesen zeichen = getch(); //Wenn der Umlaut ä eingelesen wird if(zeichen == ae_ein) { //Zeichen umsetzen auf "richtigen" Wert zeichen = ae_aus; } ... //gelesenes Zeichen in den Eingabepuffer schreiben *pos++ = zeichen; ... //Adresse des Eingabepuffers zurückliefern return(eingabe); }
Du könntest die Eingabe aber auch komplett einlesen lassen von fgets() und danach über mit einer Schleife Zeichen für Zeichen durchgehen und schauen, ob da Umlaute drin sind, die umgesetzt werden müssen.
Wie du es machst, bleibt dir überlassen.
-
aha, ok, aber woher weiß ich welchen wert ae_ein hat?
-
MasterCounter schrieb:
aha, ok, aber woher weiß ich welchen wert ae_ein hat?
Mach dir ein kleines Programm, mit dem du ein Zeichen von der Tastatur einliest und lass dir den Wert ausgeben:
... zeichen = getche(); printf(" = %d\n", zeichen); ...
-
oh ne, na klar hab ich hier sogar mal eins gemacht... heut ist echt nicht mein tag...
danke dir, auch wenns ne schwere geburt war
-
Warum funktioniert diese Funktion hier nicht?
char* ConvUmlaute (char *string) { int i=0; int len=0; int ae_ein=-124; int oe_ein=-108; int ue_ein=-127; int AE_ein=-114; int OE_ein=-103; int UE_ein=-102; int ss_ein=-31; unsigned char ae_aus=132; unsigned char oe_aus=148; unsigned char ue_aus=129; unsigned char AE_aus=142; unsigned char OE_aus=153; unsigned char UE_aus=154; unsigned char ss_aus=225; len=strlen(string); i=0; while (i<=len) { if (string[i]==ae_ein) string[i]=(char)ae_aus; else if (string[i]==ue_ein) string[i]=(char)ue_aus; else if (string[i]==oe_ein) string[i]=(char)oe_aus; else if (string[i]==AE_ein) string[i]=(char)AE_aus; else if (string[i]==UE_ein) string[i]=(char)UE_aus; else if (string[i]==OE_ein) string[i]=(char)OE_aus; else if (string[i]==ss_ein) string[i]=(char)ss_aus; i++; } return string; }
-
Ganz einfach. Du machst folgendes:
... if(string[i] == 'a') { string[i] = 'a'; } ...
Vielleicht verstehst du besser was ich meine, wenn du einfach mal nach deinen *_ein und *_aus mal folgendes aufrufst:
printf("%d => %d\n", ae_ein, ae_aus);
Du solltest die *_ein und *_aus übrigens besser als Konstanten definieren. (Also ein const davor schreiben oder sie als Präprozessormakros definieren.)
-
du meinst
printf ("%c => %c",ae_ein,ae_aus);
ich habs gemerkt, aber was muss ich ändern, das ist echt ein witz, aber ich steh im Moment echt irgendwie total auf der Leitung...
-
Ich packs echt nicht...
-
immer noch nicht...
-
ach komm, AJ jetzt sags mir halt, ich bin ja praktisch dein Nachfoger, weil meine Initialien sind AK
-
ach komm, AJ jetzt sags mir halt, ich bin ja praktisch dein Nachfoger, weil meine Initialien sind AK
EDIT: Sorry wegen dem Doppelposting Firefox hat gesponnen...
Ach nein, der IE hat ihn abgelenkt
-
wie wärs mit %d???
-
@MasterCounter
Na wenn ae_ein und ae_aus den gleichen Wert haben, dann änderst du nichts. Du musst rausbekommen welchen Wert du für ä einliest und welchen Wert du ausgeben musst, damit ein ä erscheint (und das gleiche bei den anderen Umlauten).Dazu kannst du dir übrigens wieder ein Programm schreiben. Einfach eine Schleife von 0 weg hochzählen lassen bis 255 (mehr hat hald ein char nicht ;)) und den %c und das %d dazu ausgeben.