C++ Mehrere Eingaben Hilfe

Noobish

Grünschnabel
Hallo zusammen,

Versuche mich gerade an C++, nun möchte ich mit cin eine Eingabe machen was auch funktioniert. Jedoch möchte ich eine zweite eingabe machen und die soll durch die erste Eingabe geteilt werden. Zudem soll die zweite eingegebene zahl sich im Raum 1-9 befinden.

Weiß da nicht weiter, finde nicht den richtigen ansatz zur Lösung.

Hoffe mir kann da wer helfen:)
 

Technipion

Erfahrenes Mitglied
Wo genau scheitert es? Bei der zweiten Eingabe? Du kannst ja einfach wieder std::cin benutzen.

Kannst du mal deinen aktuellen Code posten (die drei Punkte → Einfügen → Code [C++])?
 

Noobish

Grünschnabel
C++:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int zahl2;
int zahl1, position = 0;
//das Feld zum Speichern der Reste
int reste[16];
//Das Feld wird mit 0 besetzt
for (int index = 0; index < 16; index++)
reste[index] = 0;
//den Wert einlesen
do {
//bitte in einer Zeile eingeben
cout << "Geben Sie den Wert ein, der umgerechnet werden soll(max. 65 535): ";
cin >> zahl1;
cout <<"Geben sie den Divisor ein(max 2-9): ";
cin >> zahl2;

} while (zahl1 > 65535);
while (zahl2>10);
//die Schleife
do {
//den Rest der Division ablegen
reste[position] = zahl1 % zahl2;
//zur nächsten Position gehen
position++;
//durch 2 teilen und wieder zuweisen
zahl1 = zahl1 / zahl2;
} while (zahl1 != 0);
//die "Reste" von hinten nach vorne ausgeben
for (int index = 15; index >= 0; index--) {
cout << reste[index];
//alle vier Stellen fügen wir eine Leerstelle ein
if (index % 4 == 0)
cout << " ";
}



Habe das Problem gelöst ,allerdings wil ich das bei der 2ten Eingabe nur die zahlen von 2-9 eingegeben werden können. Kann da wer helfen?
 

Noobish

Grünschnabel
Was stimmt mit dem Code nicht? Sry wenn das anders üblich ist bin absoluter Anfänger und weiß nicht was ich da falsch gemacht habe.
 

vfl_freak

Premium-User
man rückt bspw. ein, um eine gewisse Übersichtlichkeit zu erlangen :)
C++:
int main(int argc, char **argv)
{
    int zahl2;
    int zahl1, position = 0;

    // das Feld zum Speichern der Reste
    int reste[16];

    // Das Feld wird mit 0 besetzt
    for (int index = 0; index < 16; index++)
    {
        reste[index] = 0;  // am besten IMMER klammern
    }

    //den Wert einlesen
    do
    {
        // bitte in einer Zeile eingeben
        cout << "Geben Sie den Wert ein, der umgerechnet werden soll(max. 65 535): ";
        cin >> zahl1;
        cout <<"Geben sie den Divisor ein(max 2-9): ";
        cin >> zahl2;
    } while (zahl1 > 65535);

//  while (zahl2>10); // ????

    //die Schleife
    do
    {
        // den Rest der Division ablegen
        reste[position] = zahl1 % zahl2;

        // zur nächsten Position gehen
        position++;

        //durch 2 teilen und wieder zuweisen
        zahl1 = zahl1 / zahl2;
    } while (zahl1 != 0);

    //die "Reste" von hinten nach vorne ausgeben
    for (int index = 15; index >= 0; index--)
    {
        cout << reste[index];

        //alle vier Stellen fügen wir eine Leerstelle ein
        if (index % 4 == 0)
        cout << " ";
    }
} // FEHLTE HIER !!

Und schau Dir mal Deine erste DO-WHILE-Schleife an!!
Was ist mit dem zweiten WHILE ??

VG Klaus
 

Noobish

Grünschnabel
Also müsste ich noch eine { und das do beim zweiten while tauschen? Und wie kriege ich es hin das bei der 2ten eingabe nur zahlen von 2 - 9 eingegeben können?

Ahh okay vielen Dank wusste nicht das man das verrückt damit es besser zu lesen ist.
 

vfl_freak

Premium-User
ich glaube, da fehlen Dir doch eine Grundlagen in Sac hen Schleifenbehandlung!
Hier und hier mal zwei Seiten, die es ganz gut erklären!

Wenn Du Deine while-Schleifen vschachteln möchstest, würde es grundlegend so gehen:
C++:
do
{
    // mache irgendwas

    do
    {
        // mache irgendwas anders
    } while( Bedingung_1 )

    // mache irgendwas ganz anderes
} while( Bedingung_2 )

Dass klappt aber so für Dein Beispiel nicht!
Mal davon abgesehen, dass Deine Bedingung in Zeile 23 falsch ist ("die Schleife soll solange laufen, wie 'zahl1' größer als 65535 ist")

Zudem musst Du Deine beiden Bedingungen NACHEINANDER prüfen!

Hier in PSEUDOCODE:
- Einlesen des Umrechnungswerts
- Prüfen ob: 0 < WERT <= 65535
- ggf. solange wiederholen, bis ein gültiger Wert vorliegt (erste Schleife)

dann
- Einlesen des Divisor
- Prüfen ob: 2 <= Divisor <= 9
- ggf. solange wiederholen, bis ein gültiger Wert vorliegt (zweite Schleife)

- ggf. nach jeweils 'n' falschen Versuchen das programm beenden, damit es nicht ewig weiterläuft!

VG Klaus
 

Neue Beiträge