2013-05-03 2 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

답변

7

int Questions=NumQuests; 

Questions>NumQuests; 

서로를 좋아하지 않기 때문에.

당신은 NumQuestsQuestions를 설정 한 다음 Questions 그것이로 시작하지 않는, NumQuests보다 확실히 큰만큼 계속하기 위해 루프를 말한다.

이 경우에도 곧 오버플로가 발생하고 정의되지 않은 동작이 발생합니다.

0

이가-루프를 사용하는 방법이 아니다 : 고르으로

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--) 
{ ... }