2016-11-07 9 views
-2

Ich habe versucht, ein Programm zu machen, das die Teiler einer Zahl findet, die vom Benutzer angegeben wird. Mein Programm kompiliert, aber es funktioniert nicht richtig.Suche nach Divisoren einer Nummer

#include <iostream> 

using namespace std ; 

int main() { 
    int a,x,y,z,p ; 
    int d [z] ; 
    y=0 ; 
    cout << "Please give me the number you want me to check for dividors" << endl ; 
    cin >> a ; 
    for (x=2;x<a;x++){ 
     if(a%x==0) 
      d[y]=x ; 
      y++ ; 
    } 
    if (y==0){ 
     cout << a <<" has no dividors except itself and 1 and therefore, " << a <<" is a prime" << endl ; 
    } 
    else 
     cout << a <<" has " << y <<" dividors except itself and 1 and this dividors are :" << endl ; 
     for (p=0;p<=y;p++){ 
      cout << d[p] <<endl ; 
     } 

    return 0 ; 
} 
+4

'd [z]' - stellen Sie sich eine einfache Frage. Wie groß ist dieses Array? –

+2

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+1

Sie sagen "dividor", ich sage "divisor", lassen Sie uns die ganze Sache nennen :-) – paxdiablo

Antwort

0

Ich würde dies als Kommentar hinzufügen, aber ich habe noch nicht genug Ruf.

Wie auch immer, ich glaube, das Problem liegt in Ihrer letzten for-Schleife. Sie durchlaufen p <= y, wenn y die Anzahl der Divisoren ist, die Sie im Array d[] haben. d[y] ist out-of-bounds und die Schleife sollte nur solange durchlaufen wie p < y.