2017-04-02 414 views
1

我有3个功能:C++函数调用函数不工作

  1. 首先函数采用int一个,并打印该多个点。
  2. 第二个函数需要一个int b并打印该星号。
  3. 第三个函数需要a和b并调用点函数和星函数。当我在main中调用它时,它返回0而没有任何输出。

每个函数都能正常工作 - 为什么第三个函数不能工作呢?

编辑:尝试初始化i = 0,代码仍编译结果相同。同样,函数dots()和stars()在自己调用时都可以正常工作。

void dots(int a){ 
    for(int i; i<a; i++){ 
     cout << "."; 
    } 
} 
void stars(int a){ 
    for(int i; i<a; i++){ 
     cout << "*"; 
    } 
} 

//(not working): 
void dotsstars(int a, int b){ 
    dots(a); 
    stars(b); 
} 

int main(){ 
    dotsstars(5, 6); 

    return 0; 
} 
+2

未初始化的自动变量(即本地变量)不会被隐式初始化。他们的价值将是*不确定*。在C++中使用它们会导致*未定义的行为*。 –

回答

4

实例化迭代我值为0。因此,for循环变成:

for(int i = 0; i < limit; i++) 

另外,也许你的程序关闭太快,才能看到效果,如果你不从您的终端/控制台执行它。

int main() { 

    /* your function invoked */ 

    int i = 0; 
    cin >> i++; // This is a not so neat way to pause your program. Do something with your value so that you don't get unused variable warning. 
    return 0; 
} 
+1

你可以使用** getch **代替 –

+1

是的,在Visual C++中有很多方法... system(“暂停”)。感谢您的补充。你可以编辑,如果你想。我使用的是手机浏览器,输入相当糟糕。 – 0xDEFACED

0

需要初始化自增我到0:

for (int i=0; i<a; i++){ 
+0

要清楚的是,当您使用本地变量而没有先给它赋值时,结果是未定义的。这个评论http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value是关于C,但这一点是有效的这里。 –

+0

**增量**是一个非常错误的术语,应该**初始化** –

+0

初始化变量而不是增量器 –

0

你没有初始化i这就是为什么它不打印。 i是一个局部变量,所以局部变量的默认值将是垃圾值,这就是为什么你需要首先初始化它。

#include<iostream> 
using namespace std; 
void dots(int a){ 
    for(int i=0; i<a; i++){// i is set to be 0 here 
     cout << "."; 
     } 
    } 
void stars(int a){ 
    for(int i=0; i<a; i++){// i is set to be 0 here 
     cout << "*"; 
     } 
    } 

//(not working): 
void dotsstars(int a, int b){ 
    dots(a); 
    stars(b); 
} 

int main(){ 
    dotsstars(5, 6); 

    return 0; 
} 
3

目前最大的变量i具有垃圾值,因此最有可能的for循环将永远是假的(即它不会运行) 所以你需要初始化i

for(int i = 0; i < number_of_times ; i++) 

如果您的控制台快速关闭并且无法看到结果,最后添加getch();,则必须包含#include <conio.h>

P.S我知道使用getch()不是一个好的做法,它使程序操作系统依赖。