2013-05-03 138 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--) 
{ ... }