2015-04-24 14 views
5

Voglio creare una forma simile a questo:Creare una forma in C++

ccccccc 
cccccc 
ccccc 
cccc 
ccc 
cc 
c 

Il mio codice è:

#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; 
} 

Ma nel terminale di uscita che ottengo è alcune righe vuote.

Cosa sto sbagliando?

enter image description here

+0

Dove sono questi presunti righe vuote? Puoi fornirci il tuo output corrente? – mstbaum

+0

[Ecco uno screenshot] (https://www.anony.ws/image/DpCK) – Sakir

risposta

18

for(j = 7; j > 7; j--){ Questa espressione è sempre false.

è necessario scrivere for(j = 7; j > i; j--){

+2

È uno schema molto, molto popolare in tutto il software C++: DI spero che qualcuno ne faccia una libreria, ad esempio std :: ChristmasTree < >, i modelli sono migliori: D – Mouze

+1

@Mouze: in tutti i miei anni di programmazione, l'unica volta che vedo questo modello è assegnata a corsi di programmazione introduttivi in ​​C e C++. È usato raramente di nuovo in tutto il curriculum C e C++. –

4

Si desidera che questo:

#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

Il codice originale aveva un errore logico nel ciclo interno

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

qui j è 7 ma j non sarà mai superiore a 7 in modo che non esegue, ma anche se questo è stato fissato a

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

questo sarà solo cout 7 'c' 7 volte, così quello che ho modificato è stato quello di cambia i tuoi loop interni iniziando il valore in modo che decresca correttamente.

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

Quindi, che cosa accadrebbe è che il ciclo interno mai eseguito, ma si eseguisse cout << endl; 7 volte quindi le righe vuote

0

La condizione del ciclo

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

è sbagliato. Cioè è sempre uguale a false perché inizialmente mi è impostato su 7 e non può essere superiore a 7. :)

Credo che si intende qualcosa di simile

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

Il programma può essere scritto più semplice.

#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; 
} 

L'output del programma è

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