# [VC++] Umlaute in der Konsole



## Piesbruhder (15. Oktober 2002)

Guten Tag,

Ich suche eine Möglichkeit, wie ich in der Konsole ö, ü, ä und ß
darstellen kann. Ich nehme an, dass man das irgendwo in VC++ selbst
eintsellen kann. Aber vielleicht muss man auch einfach etwas einbinden.
Ich hoffe ihr könnt mir wie immer helfen.

-gruß Piesbruhder


----------



## Thomas Kuse (15. Oktober 2002)

1. musst du sicher gehn, dass der tastatur-treiber auch umlaute akzeptiert!

ansonsten dürftest du die dinger per ascii - zeichen-tabelle einfügen können

laut meinem kleinen c-programm:

```
#include <conio.h>
#include <stdio.h>

int main()
{
        char c;
        while ((c=getch())!='!'){
                printf("%c : %d\n", c, (int)c);
        }
        return 0;
}
```

ö: -108
ä: -124
ü: -127
?: -31


----------



## goela (15. Oktober 2002)

Hier mal zwei Lösungen!!!

Variante 1 (mit eigener Funktion):

```
#include "stdafx.h"

#include <string.h>
#include <iostream.h>

// Die Funktion sc liefert einen Zeiger auf einen String zurück.
// Übergabeparameter ist ein Stringarray bzw. ein Stringkonstante.
// Aufgabe der Funktion ist das konvertieren von Umlauten wie
// Ü,ü,Ö,ö,Ä,ä und ß.

char* sc(char* String)
{
    static char strnew[100]; // Maximale Stringlänge im Moment 99 Zeichen + '\0'
            
    int character=0;

    for(unsigned int i=0;i<strlen(String);i++)
    {
        character = String[i];
        
        switch(character)
        {
        case -42:               // Ö
            strnew[i] = '\x99';
            continue;

        case -36:               // Ü
            strnew[i] = '\x9A';
            continue;
        
        case -60:               // Ä
            strnew[i] = '\x8E';
            continue;

        case -28:               // ä
            strnew[i] = '\x84';
            continue;

        case -4:                // ü
            strnew[i] = '\x81';
            continue;

        case -10:               // ö
            strnew[i] = '\x94';
            continue;

        case -33:               // ß
            strnew[i] = '\xE1';
            continue;
        
        default:
            strnew[i] = String[i];

        } // Von switch
    
        
    } // Von for
    
    strnew[i]='\0'; // Nullzeichen anfügen.
        
    return strnew;
}

int main(int argc, char* argv[])
{
    
    cout << "Schließen,Öffnen,Ändern,Üben" << endl;
    cout << sc("Schließen,Öffnen,Ändern,Üben") << endl;

    getchar();
    return 0;
}
```

Variante 2 (mit Windowsfunktion CharToOem):

```
#include <iostream.h> // cout
#include <windows.h>  // CharToOem

int main(int argc, char* argv[])
{
    char szUmlauteVorher[50] = "Ändern,Öffnen,Schließen,Üben";
    char szUmlauteNachher[50] = "";

    CharToOem(szUmlauteVorher,szUmlauteNachher);

    cout << "Hier der String vor der Konvertierung  = " << szUmlauteVorher << endl << endl;

    cout << "Hier der String nach der Konvertierung = " << szUmlauteNachher << endl;

    getchar();
    return 0;
}
```


----------

