2016-11-07 49 views
-2

我试图制作一个程序,查找用户给出的数字的除数。我的程序正在编译,但无法正常工作。查找数字的因子

#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]' - 问问你自己一个简单的问题。这个数组的大小是多少? –

+2

解决这些问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –

+1

你说“dividor”,我说“除数”,让我们把所有的东西都叫掉:-) – paxdiablo

回答

0

我会将此添加为评论,但我没有足够的声望呢。

无论如何,我相信问题是位于您的最后一个for循环。当y是您在数组d[]中具有的除数时,您正在迭代到p <= yd[y]是超出界限的,循环只应重复p < y