2016-10-08 6 views
-3

Ich habe versucht, diese Sanduhr-Muster, für eine Weile jetzt, und ich habe fest, wie es weiter geht, muss der Benutzer die Anzahl der # in der Spitze eingeben Zeile und um die Anzahl der Zeilen anzugeben. Wenn die Anzahl von # weniger als 3 ist, wird eine Fehlermeldung ausgegeben. Wenn die Anzahl der Zeilen kleiner als 1 ist, ist sie ungültig oder wenn sie weniger als 2 '#' s hat.Wie bekomme ich ein Sanduhrmuster in C++

Trotzdem bekomme ich dieses Muster, wenn ich 7 für die obere Reihe und 3 für die Anzahl der Reihen eingib.

7 # 's an der Spitze

5 #' s in der nächsten Reihe

3 # 's in der nächsten Reihe

3 #' s in der nächsten Reihe

5 # 'si n der nächste Zeile

7 # ‚s in der nächsten Zeile

Und ich brauche nicht eine der Zeilen mit 3 #‘ s, aber ich kann nicht scheinen, um es loszuwerden.

Auf jeden Fall hier ist mein Code:

// Declare and initialize variables 

    int topRow(0); 
    int row(0); 
    int i(0); 
    int k(0); 
    int j(0); 


    // Repeatedly prompt for top row size until valid value is entered 

cout << "Enter size of the top row: " ; 
cin >> topRow; 

    while(topRow < 3) 
    { 
    cout << "Size of the top tow must be at least three." << endl; 
    cout << "Enter size of the top row again: "; 
    cin >> topRow; 
    } 


    // Repeatedly prompt for the number of rows until valid value is entered 

cout << "Enter number of rows: "; 
cin >> row; 

    while(row == 0 || topRow/row < 2.0 || row < 1.0) 
    { 
    cout << "Invalid number of rows." << endl; 
    cout << "Enter number of top row again: "; 
    cin >> row; 
    } 


    // Print the hour glass 
cout << endl; 

    for (i=1; i < topRow ; i++) 
    { 
     if (i <= row) 
     { for (j=1; j <= i-1; j++) 
      { 
      cout << " "; 
      } 
      for (k=1; k <= topRow - (i*2 - 2) ; k++) 
      { 
      cout << "#"; 
      } 
      cout << endl; 
     } 
     else 
     { 
      for (j = row ; j >= i - (row - 1); j--) 
      { 
       cout << " "; 
      } 
      for (k = row ; k >= topRow - (i*2 - 2); k--) 
      { 
       cout <<"#"; 
      } 
      cout << endl; 
     } 
} 

    // end program 
    return 0; 
+0

Bitte fügen Sie Beispiele für gültige Eingabe hinzu, was die Ausgabe dann sein soll und was die Ausgabe eigentlich ist. –

+0

Sie müssen keine Eingabe-Routinen posten. Das ist mehr als die Hälfte deines Beitrags, der mit Dingen belegt ist, die nicht wichtig sind. Einfach die Eingabewerte in Ihrem Programm fest codieren. – PaulMcKenzie

+0

Das Programm erfordert, dass ich Zahlen vom Benutzer eingegeben habe, so kann ich nicht nur hart codieren, ich habe auch fett, wie die Ausgabe oben aussehen sollte. – Carmine

Antwort

0

Sie können einen Scheck an den ersten Iteration der zweiten Hälfte der Sanduhr hinzuzufügen. Wenn

Obwohl chaotisch, würde dies mag:

static bool first = true; 
if (first) { 
    first = false; 
} else { 
    // ... second print code 
} 

Die Eingabe von 7 und 3 wird nun sein:

####### 
##### 
    ### 
##### 
####### 

Wenn Sie andere Eingaben erwarten sein korrekt formatiert Du hast ein viel größeres Problem.
Ich schlage vor, dass Sie Ihren Algorithmus überarbeiten.