c ++函数调用函数不起作用

时间:2017-04-02 16:02:39

标签: c++ function nested

我有3个功能:

  1. 第一个函数接受一个int a并打印该点数。
  2. 第二个函数接受一个int b并打印出这个数量的星号。
  3. 第三个函数取a和b并调用点函数和星号函数。当我在main中调用它时,它返回0而没有任何输出。
  4. 每个功能都可以自行运行 - 为什么第三个功能不起作用呢?

    编辑:尝试初始化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;
    }
    

4 个答案:

答案 0 :(得分:4)

将迭代i值实例化为0.因此,for循环变为:

 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;
 }

此外,如果您没有从终端/控制台执行该程序,您可能会看到结果之前,程序关闭得太快。

type MenuItem msg
    = MenuItem
        { attributes : List (Attribute msg)
        , children : List (Html msg)
        }

答案 1 :(得分:3)

此时变量i具有垃圾值,因此很可能 for loop 将始终为false(即它不会运行) 所以你需要初始化i

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

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

P.S我知道使用getch()不是一个好习惯,它会使程序OS依赖。

答案 2 :(得分:0)

您需要将增量器i初始化为0:

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

答案 3 :(得分: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;
}