【问题标题】:c++ function calling function not workingc++函数调用函数不起作用
【发布时间】:2017-04-02 16:02:38
【问题描述】:

我有 3 个功能:

  1. 第一个函数采用 int a 并打印该点数。
  2. 第二个函数采用 int b 并打印该数量的星星。
  3. 第三个函数采用a 和b 并调用dots 函数和stars 函数。当我在 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;
}

【问题讨论】:

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

标签: c++ function nested


【解决方案1】:

将您的迭代 i 值实例化为 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;
 }

【讨论】:

  • 你可以使用 getch 代替
  • 是的,在 Visual C++ 中也有很多方法...system("pause")。感谢您添加。您可以根据需要进行编辑。我在移动浏览器上,打字很糟糕。
【解决方案2】:

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

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

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

PS 我知道使用 getch() 不是一个好习惯,它使程序依赖于操作系统。

【讨论】:

    【解决方案3】:

    你没有初始化 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;
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 需要明确的是,当您使用局部变量而不首先为其赋值时,结果是未定义的。这条评论 stackoverflow.com/questions/1597405/… 是关于 C 的,但这里的观点是有效的。
      • incrementer 是一个非常错误的术语,应该initialized
      • 初始化变量而不是增量器
      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      相关资源
      最近更新 更多