2016-03-26 10 views
-1

Das Programm, das ich geschrieben habe, soll eine Reihe von Zeilen von der Benutzereingabe nehmen und dann so viele Reihen von Sternen anzeigen, mit einem Stern in der ersten Reihe, zwei in der zweiten, und so weiter. Es funktioniert, aber ich habe zwei Probleme:C++ Verschachtelte Schleifen/Dynamisches Array E

1) Es gibt immer ein zusätzliches Symbol am Anfang jeder Zeile und ich weiß nicht, woher es stammt. Ich habe versucht, den [0] Wert des Arrays anzuzeigen, aber es scheint nicht von dort zu kommen.

2) Beim Eingeben einiger Zahlen (nicht aller) von Zeilen zeigt das Programm diese mit zusätzlichen Zufallssymbolen unmittelbar nach den Zeilen an. Ist das ein Problem bei der dynamischen Speicherzuordnung?

Vielen Dank für Ihre Hilfe.

#include<iostream> 
using namespace std; 
int main() 
{ 
cout << "Enter the number of rows: "; 
int number; 
cin >> number; 
int q = number + 1; 
char dot = '.'; 
char asterisk = '*'; 
char * array1 = new char[q]; 

int n, m, s; 
n = number; 
for (n; n > 0; n--) 
    { 
     array1[n] = asterisk; 

     for (m = n - 1; m > -1; m--) 
      { 
       array1[m] = dot; 
      } 

     cout << array1 << endl; 
    } 
delete [] array1; 
return 0; 
} 
+0

Array-Indizes beginnen mit "0". Wenn Sie also mit "10" Zeilen beginnen, setzt die erste Iteration "array1 [10]" auf a * - aber das ist tatsächlich das elfte Zeichen in der Zeichenfolge. –

+1

Ihr schwerwiegenderes Problem besteht darin, dass Ihre Zeichenfolge nicht null terminiert ist. Sie müssen Speicherplatz für ein zusätzliches Zeichen reservieren und auf 0 setzen. –

+0

Sie initialisieren den zugewiesenen Speicher nicht, so dass er alles enthalten kann, und das Drucken kann zu undefiniertem Verhalten führen, da Sie es nicht mit null –

Antwort

0

Die char [] ist nicht mit einem NUL Zeichen beendet so die < < Bediener nicht wissen, wann das Schreiben aufzuhören. Versuchen Sie stattdessen, cout.write() zu verwenden.