2015-04-24 6 views
5

Ich möchte eine Form wie diese erstellen:Erstellen einer Form in C++

ccccccc 
cccccc 
ccccc 
cccc 
ccc 
cc 
c 

Mein Code ist:

#include <iostream> 

using namespace std; 

int main(){ 
    int i, j; 
    for(i = 0; i < 7; i++){ 
     for(j = 7; j > 7; j--){ 
      cout << 'c'; 
     } 
     cout << endl; 
    } 
    return 0; 
} 

Aber im Terminal der Ausgang I bekommen einige Leerzeilen.

Was mache ich falsch?

enter image description here

+0

Wo diese Leerzeilen mutmaßlich? Können Sie uns Ihre aktuelle Ausgabe zur Verfügung stellen? – mstbaum

+0

[Hier ist ein Screenshot] (https://www.anony.ws/image/DpCK) – Sakir

Antwort

18

for(j = 7; j > 7; j--){ Dieser Ausdruck ist immer falsch.

Sie benötigen for(j = 7; j > i; j--){

+2

Es ist ein Muster sehr, sehr beliebt in allen C++ - Software: D Ich hoffe jemand eine Bibliothek davon machen, sagen std :: ChristmasTree < >, templated ist besser: D – Mouze

+1

@Mouze: In all meinen Programmierjahren ist das einzige Mal, dass ich dieses Muster sehe, eine Zuordnung in einem einführenden C- und C++ - Programmierkurs. Im C- und C++ - Curriculum wird es selten wieder verwendet. –

4

du schreiben wollen:

#include <iostream> 

using namespace std; 

int main(){ 
    int i, j; 
    for(i = 7; i > 0; --i){ 
     for(j = i; j > 0 ; j--){ 
      cout << 'c'; 
     } 
     cout << endl; 
    } 
    return 0; 
} 

live example

Ihr Original-Code einen Logikfehler hatte

in der inneren Schleife

for(j = 7; j > 7; j--){

hier j 7 aber j wird nie größer sein als 7 es so nie ausgeführt wird, aber selbst wenn dies zu

fixiert wurde

for(j = 7; j > 0; j--){

Dies wird nur cout 7 ‚c‘ 7-mal, also was ich geändert wurde, um Ändere den Startwert für die inneren Schleifen, so dass er dann korrekt dekrementiert wird.

for(i = 7; i > 0; --i){ 
      for(j = i; j > 0 ; j--){ 
        ^now initialised by outer loop 

So würde passieren, was ist, dass die innere Schleife ausgeführt nie, aber sie ausgeführt cout << endl; 7mal damit die Leerzeilen

0

Der Zustand der Schleife

for(j = 7; j > 7; j--){ 

falsch ist. Das heißt es ist immer gleich falsch, weil anfänglich i bis 7, und es kann nicht größer sein als 7. :)

Ich denke, meinen Sie so etwas wie

for(j = 7 - i; j > 0; j--){ 

Das Programm kann einfacher geschrieben werden.

#include <iostream> 
#include <iomanip> 

int main() 
{ 
    while (true) 
    { 
     std::cout << "Enter a non-negative number (0-exit): "; 

     size_t n = 0; 
     std::cin >> n; 

     if (!n) break; 

     const char c = 'c'; 

     std::cout << std::setfill(c); 

     while (n) std::cout << std::setw(n--) << c << std::endl; 
    } 

    return 0; 
} 

Die Programmausgabe ist

Enter a non-negative number (0-exit): 7 
ccccccc 
cccccc 
ccccc 
cccc 
ccc 
cc 
c 
Enter a non-negative number (0-exit): 0