2015-04-24 39 views
5

Chcę utworzyć kształt tak:Tworzenie kształtu w C++

ccccccc 
cccccc 
ccccc 
cccc 
ccc 
cc 
c 

Mój kod to:

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

Ale w terminalu wyjście mam pewne puste linie.

Co robię źle?

enter image description here

+0

gdzie są te rzekome puste wiersze? Czy możesz podać nam swoje aktualne wyniki? – mstbaum

+0

[Tutaj jest zrzut ekranu] (https://www.anony.ws/image/DpCK) – Sakir

Odpowiedz

18

for(j = 7; j > 7; j--){ To wyrażenie jest zawsze fałszywe.

Musisz napisać for(j = 7; j > i; j--){

+2

Jest to wzorzec bardzo, bardzo popularny we wszystkich programach C++: DI nadzieję, że ktoś zrobi z tego bibliotekę, np. Std :: ChristmasTree < >, szablon jest lepszy: D – Mouze

+1

@Mouze: We wszystkich moich latach kodowania, jedyny raz widzę ten wzór przez przypisania w początkowym kursie programowania C i C++. Jest rzadko używany ponownie w programach C i C++. –

4

Chcesz to:

#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

Twój oryginalny kod był błąd logiczny w pętli wewnętrznej

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

tu j jest 7, ale j nie będzie większa niż 7, więc nigdy nie wykonuje, ale nawet jeśli ten został ustalony na

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

będzie to zaledwie cout 7 „c” 7 razy, więc co ja zmodyfikowany było zmień wartość początkową pętli wewnętrznej, aby następnie poprawiała się poprawnie.

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

Więc co by się stało, jest to, że wewnętrzna pętla nigdy wykonywane, ale wykonywane cout << endl; 7 razy stąd puste linie

0

Warunek pętli

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

jest źle. Oznacza to, że zawsze jest równa false, ponieważ początkowo I jest ustawiony na 7 i nie może być większa niż 7. :)

Chyba masz na myśli coś takiego

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

Program może być napisany prostsze.

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

Wyjście programu jest

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