2017-04-02 413 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()不是一個好的做法,它使程序操作系統依賴。