C++ - Eingabe soll auf beliebigen Wert des Arrays zutreffen

Baker

Mitglied
Hallo,

folgender unfertiger Code:
[CODE lang="cpp" highlight="13, 22"]int rot13() {

char upperCase[39] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'};
char lowerCase[39] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'};

char eingabe;

printf("Geben Sie einen Buchstaben ein: ");
scanf("%c", &eingabe);

if (eingabe == upperCase[0]) {

for (eingabe = upperCase[0]; eingabe = 13; eingabe++) {

cout << upperCase[eingabe];
break;

}

} else if (eingabe == lowerCase[0]) {

for (eingabe = lowerCase[0]; eingabe = 13; eingabe++) {

cout << lowerCase[eingabe];
break;

}

}

}[/CODE]

Ich möchte in der If-Bedingung es so schreiben, dass für egal welchen Wert der Eingabe aus dem Array, er es aus dem Array ließt und das Programm weiter ausführt. Jetzt führt er das Programm ja nur aus wenn ich entweder A oder a eingebe. Aber ich möchte es für alle anderen Buchstaben auch ausgeführt bekommen. Wie kann ich das schreiben?

Danke.
 
K

kneitzel

Gast
1) Als erstes ein Hinweis: Keine mehrfache Verwendung einer Variable! Das ist eine absolute Totsünde in der Software Entwicklung!
Also was soll die Variable eingabe sein? Eine Eingabe oder eine Zählvariable in der for Schleife?

2) In der for Schleife kommt an zweiter Stelle ein Vergleich - da hast Du aber eine Zuweisung! Also merke: = und == sind zwei Paar Dinge!

3) Eine for Schleife, in der immer sofort ein break kommt, ist einfach Unsinn. Entweder Du willst eine Schleife, dann wird etwas auch mehrfach ausgeführt. Wenn das generell nicht erwünscht ist, dann nutz eine if Anweisung statt der for Schleife!

Und wenn Du so Probleme hast, dann unterteil das Problem! Du willst prüfen, ob das eingegebene Zeichen eingabe in dem Array von Zeichen enthalten ist. Dann schreib eine Funktion, die dies testet:
Dann rufst Du nur die Methode auf, also sowas wie: istEnthalten(eingabe, lowerCase)

Diese Methode kannst Du nun einfach für sich schreiben. Was musst Du denn machen, um dies zu prüfen? Das einfach erst einmal in Worte fassen. Dann kann man das - so man es vernünftig formuliert hat - 1:1 in Code umsetzen.
 

Baker

Mitglied
1) Als erstes ein Hinweis: Keine mehrfache Verwendung einer Variable! Das ist eine absolute Totsünde in der Software Entwicklung!
Also was soll die Variable eingabe sein? Eine Eingabe oder eine Zählvariable in der for Schleife?

2) In der for Schleife kommt an zweiter Stelle ein Vergleich - da hast Du aber eine Zuweisung! Also merke: = und == sind zwei Paar Dinge!

3) Eine for Schleife, in der immer sofort ein break kommt, ist einfach Unsinn. Entweder Du willst eine Schleife, dann wird etwas auch mehrfach ausgeführt. Wenn das generell nicht erwünscht ist, dann nutz eine if Anweisung statt der for Schleife!

Und wenn Du so Probleme hast, dann unterteil das Problem! Du willst prüfen, ob das eingegebene Zeichen eingabe in dem Array von Zeichen enthalten ist. Dann schreib eine Funktion, die dies testet:
Dann rufst Du nur die Methode auf, also sowas wie: istEnthalten(eingabe, lowerCase)

Diese Methode kannst Du nun einfach für sich schreiben. Was musst Du denn machen, um dies zu prüfen? Das einfach erst einmal in Worte fassen. Dann kann man das - so man es vernünftig formuliert hat - 1:1 in Code umsetzen.
Ich habe das jetzt so gemacht:

C++:
int rot13() {

    char upperCase[39] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
                          'U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'};
    char lowerCase[39] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                          'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'};
    
    char eingabe;
    
    printf("Geben Sie einen Buchstaben ein: ");
    scanf("%c", &eingabe);
    
    for (int i = 0; i < 39; i++) {
        
        if (upperCase[i] == eingabe) {
            
            cout << upperCase[i+13];
            
        } else if (lowerCase[i] == eingabe) {
            
            cout << lowerCase[i+13];
            
        }
            
    }
    
}

Aber jetzt habe ich folgendes Problem. Wenn ich jetzt z.B. A oder a eingebe oder andere Buchstaben kommt auch der Buchstabe dabei heraus den ich will, in dem Falle N bzw. n. Aber bei bestimmten (nicht allen) anderen Buchstaben wie z.B. ein B oder C kommt zwar auch der richtige Buchstabe heraus aber dazu noch ein Zeichen wie z.B. bei B ist es so:

Code:
Geben Sie einen Buchstaben ein: B
O�

oder beim C:

Code:
Geben Sie einen Buchstaben ein: C
P�

Woran liegt das?
 
K

kneitzel

Gast
Also ein Problem ist, dass Du einfach auf das Array Element mit Index i+13 zugreifst. Das Array hat ja genau 39 Elemente -wenn das 30te Zeichen eingegeben wurde, dann versuchst Du auf das Zeichen mit index 43 zuzugreifen und das gibt es ja nicht. Da solltest Du also noch etwas nachbessern.

Dieses zusätzliche Zeichen kommt vermutlich über das zusätzliche Return, das noch in der Eingabe zu finden ist. Du gibst ja ein Zeichen ein und drückst Return, damit es verarbeitet wird. Aber so ganz 100% kann ich die Zusammenhänge gerade nicht erläutern.

Und noch der Hinweis: rot13 gibt ein int zurück und Du hast kein return Statement am Ende.
 

Neue Themen


Oben