2013-05-03 159 views
2

我試圖調用一個沒有返回類型的函數,但它似乎並沒有被調用。C++調用函數

的代碼看起來是這樣的(總結):

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

int ItemsInQuestion[4]; 

void GetQuestions(int NumQuests); 


int main() 
{ 
    int NumberOfQuestions = 0; 
    srand((unsigned)time(NULL)); 
    cout << "How many questions would you like?" << endl; 
    cin >> NumberOfQuestions; 
    cout << NumberOfQuestions << " questions will be asked."; 
    GetQuestions(NumberOfQuestions); 
    system ("PAUSE"); 
    return 0; 

} 

void GetQuestions(int NumQuests) 
{ 
    for(int Questions=NumQuests; Questions>NumQuests; Questions++) 
    { 
     ItemsInQuestion[0]=(rand()%(263))+1; 
     ItemsInQuestion[1]=(rand()%(263))+1; 
     ItemsInQuestion[2]=(rand()%(263))+1; 
     ItemsInQuestion[3]=(rand()%(263))+1; 
     cout << ItemsInQuestion[0] << ' ' << ItemsInQuestion[1] << ' ' <<ItemsInQuestion[2] << ' ' << ItemsInQuestion[3]; 
    } 
} 

輸出數組中值線從未出現。這是什麼造成的?

+1

無關的問題,但作爲建設性的建議:使用調試器。你確實使用調試器,不是嗎? :-)在這種情況下,我會逐步完成函數,並看到函數被調用,但for循環被跳過。 – TobiMcNamobi 2013-05-03 12:39:26

回答

7

因爲

int Questions=NumQuests; 

Questions>NumQuests; 

相互不喜歡。

您設置QuestionsNumQuests,然後告訴循環繼續下去,只要Questions嚴格大於NumQuests更大,它是不是剛開始時。

即使是這樣,你很快會遇到溢出和未定義的行爲

0

這是不使用for循環的方式:

for (__Initialization, __Condition, __Increment) 

正如格里戈裏在他的回答中指出,您的初始化是錯誤的。作爲Questions=NumQuest,聲明Questions>NumQuests從一開始就是假的,你的代碼就相當於

for (; 1<1 ;) // I'm a lazy loop, I'm ugly and useless 

有方式無限多,做你想做什麼:

// Direct : 0, 1, 2, .. NumQuest-1. 
for (int Questions=0 ; Questions < NumQuests ; Questions++) 
{ ... } 
// Reverse : NumQuest, ..., 2, 1. 
for (int Questions=NumQuests ; Questions > 0 ; Questions--) 
{ ... }