2

我试图调用一个没有返回类型的函数,但它似乎没有被调用。

代码看起来像这样(总结):

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

输出数组中的值的行永远不会出现。这是什么原因造成的?

4

2 回答 2

7

因为

 int Questions=NumQuests; 

 Questions>NumQuests;

不喜欢对方。

您设置QuestionsNumQuests,然后告诉循环继续运行,只要Questions严格大于NumQuests,它不是开始的。

即使是这样,您很快就会遇到溢出和未定义的行为

于 2013-05-03T12:03:37.677 回答
0

这不是使用 for-loops 的方式:

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--)
{ ... }
于 2013-05-03T12:29:57.343 回答