2016-07-18 8 views
-4

ScreenshotProgramm, das Multiplikationstabellen erzeugt, die komisch wirken

Hier ist der Code. Es soll ein 2D-Array erzeugen und ausgeben, aber aus irgendeinem Grund den Wert für 9x10 (90) durcheinander bringen und das Programm zum Absturz bringen. Ich habe einen Screenshot beigefügt.

Irgendwelche Ratschläge? Wie kann ich die Zahlen in einem ordentlichen Raster anordnen?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int values[10][10]; 
    for(int i=1;i<=10;i++) 
    { 
     for(int j=1;j<=10;j++) 
     { 
      values[i][j]=i*j; 
      cout<<\t<<values[i][j]<<flush; 
     } 
    cout<<endl; 
    } 

return 0; 
} 
+6

Sie tun wissen, dass Indizes in Arrays in C++ auf Null basieren? Bei einem Array von zehn Elementen gehen die Indizes von "0" bis "9" (einschließlich). Wenn Sie das nicht wissen, dann müssen Sie [ein gutes Anfängerbuch finden] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) und neu beginnen . –

+0

Mir ist bewusst, aber da ich die Variablen i und j verwenden wollte, um die Werte (die von 1x1 bis 10x10 gehen) tatsächlich zu berechnen, ging ich mit i = 1 und j = 1. Dies scheint jedoch nicht die Ursache des Fehlers zu sein. – Shehryar

+1

@Shehrary ist es in der Tat die Ursache für den Fehler. Die Werte, die Sie dem Benutzer anzeigen (1 ... 10), unterscheiden sich von den Werten, die Sie zum Speichern von Daten im Array benötigen (0..9). Glücklicherweise kann man von dem anderen abgeleitet werden, aber angesichts Ihrer aktuellen Anforderungen können sie nicht dieselben sein. – fbrereto

Antwort

2

Null basierend Indizes gleichmäßig in der Konsole beabstandet Werte, Werte, beginnend bei 1:

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    int values[10][10]; 
    for (int i = 0; i < 10; i++) 
    { 
     for (int j = 0; j < 10; j++) 
     { 
      values[i][j] = (i + 1)*(j + 1); 
      cout << setw(5) << values[i][j]; 
     } 
     cout << endl; 
    } 
    return 0; 
} 
+0

Ich werde nie wieder ein Array von 1 starten. Vielen Dank. :) – Shehryar

+0

@Shehryar Sag niemals nie. Zum einen werden Sie Justin Beiber verärgern, aber noch wichtiger, es gibt die Programmiersprachen von Origin 1. – user4581301

3

ändern es zu

for(int i=0;i<10;i++) 
{ 
    for(int j=0;j<10;j++) 
    { 
     values[i][j] = (i + 1)*(j + 1); 
    } 
} 

bearbeitet auch den Körper aufzunehmen.

+0

Aber behalte '(i + 1) * (j + 1)' – LogicStuff

+0

diese Methode funktioniert. ty – Shehryar

+0

Großartig. Kannst du die Antwort akzeptieren? – Wanderer

1

Arrays bei 0 beginnen nicht 1

using namespace std; 

int main() 
{ 
    int values[10][10]; 
    for(int i=1;i<=10;i++) 
    { 
     for(int j=1;j<=10;j++) 
     { 
      values[i-1][j-1]=i*j; // <<<<<<<<<< 
      cout<<'\t'<<values[i-1][j-1]<<flush; 
     } 
    cout<<endl; 
    } 

return 0; 
} 

bearbeiten: output

Success time: 0 memory: 3412 signal:0 
    1 2 3 4 5 6 7 8 9 10 
    2 4 6 8 10 12 14 16 18 20 
    3 6 9 12 15 18 21 24 27 30 
    4 8 12 16 20 24 28 32 36 40 
    5 10 15 20 25 30 35 40 45 50 
    6 12 18 24 30 36 42 48 54 60 
    7 14 21 28 35 42 49 56 63 70 
    8 16 24 32 40 48 56 64 72 80 
    9 18 27 36 45 54 63 72 81 90 
    10 20 30 40 50 60 70 80 90 100 
+0

Danke. Immer noch der gleiche Fehler. Was sollte 90 (für 9x10) zeigt 68. Wenn ich versuche, nur diesen Wert separat auszugeben, zeigt es 11. – Shehryar

+0

also nicht der gleiche Fehler überhaupt :-). Schritt durch den Code mit einem Debugger – pm100

+0

Ich habe gerade den Code in Ideone und es funktioniert perfekt – pm100

Verwandte Themen