Padrão de diamante usando loop while em c ++ [duplicado]

Sep 17 2020

Estou tentando imprimir um padrão de diamante usando loop while em c ++ que é baseado no comprimento do diamante, mas não estou obtendo a saída que queria ver. qual parece ser o problema com meu código?

#include <iostream>
using namespace std;

int main ()
{
    cout << "Length of diamond:";
    int length = 0;
    cin >> length; 
    length = length/2;
    int r = -length;
    while (r <= length) {
        r++;
        int c = -length;
        while (c <= length) {
            c++; 
            if (abs (r) + abs (c) == length) cout << ".";
            else cout << " ";
        }
    
        cout << endl;
    }

    return 0;
}

Respostas

brc-dd Sep 17 2020 at 08:31

Conforme apontado por john em seu comentário , o problema está em incrementar re c. Aqui está o código corrigido:

#include <iostream>
using namespace std;

int main() {
    int length, r, c;
    cout << "Length of diamond: ";
    cin >> length;
    cout << '\n';
    length /= 2;
    r = -length;
    while (r <= length) {
        c = -length;
        while (c <= length) {
            if (abs(r) + abs(c) == length)
                cout << '.';
            else
                cout << ' ';
            c++;
        }
        r++;
        cout << '\n';
    }
    return 0;
}

Execução de amostra :

Length of diamond: 9
    .    
   . .   
  .   .  
 .     . 
.       .
 .     . 
  .   .  
   . .   
    . 

Observe que pode haver mais de uma maneira de obter a saída desejada. (Por exemplo, fazer em r = -length - 1vez de r = -length, mesmo para c, conforme sugerido por Zhu Song em seu comentário .

Conselho: Familiarize-se com o seu depurador. Evite colocar using namespace std;.