2012-11-03 9 views
1

아래 프로그램에서 프로그램이 while 루프가되면 작동을 멈 춥니 다. 루프없이 assisgn 값을 시도 할 때 잘 닦았습니다. 문제는 누구에게 말해 줄 수 있습니까? 나는 while 루프 자체가 잘 작동 2010While 루프가 제대로 작동하지 않습니다.

#include <stdio.h> 
#include<iostream.h> 
#include <conio.h> 

using namespace std; 
int random(int min,int max); 

struct pts 
{ 
    int x; 
    int y; 
}; 

int main() 
{ 
    struct pts *p; 
    int w = 600,h=400; 
    int nmax,kmax,k=0,n=0; 

    while(k<5) 
    { 
     p[0].x = random(0,h-1); 
     p[1].y = random(0,w-1); 
     cout << p[0].x << " " << p[1].y << "\n"; 
     k++; 
    } 
    getch(); 
    return 0; 
} 

int random(int min,int max) 
{ 
    int n=0; 
    n=(rand()%(max-min+1))+min; 
    return n; 
} 

답변

2

비주얼 스튜디오를 사용하고 있습니다. 그것은 당신이 기억을 부패시키는 것입니다. 유효한 메모리 블록에 p의 중재하는 설정으로

struct pts *p; 
p[0].x = whatever; 

: 귀하의 문제는 함께입니다. 즉, unitialised 포인터를 사용하고 있으므로 정의되지 않은 동작이므로 모든 베팅이 해제됩니다. 당신은 (현재)에만 p[0]p[1]를 사용하는 것 때문에

, 당신은 아마 변경할 수 있습니다

struct pts *p; 

에 : 물론

struct pts p[2]; 

, 당신은 변수 구조를하려는 경우 다음을 사용할 수 있습니다 :

struct pts *p = new pts[500]; 

물론 개미.


당신은 또한 최근 컴파일러로 업그레이드 할 수 있습니다, iostream.hconio.h은 시대 착오입니다. 그 샘플 실행이 제공

#include <iostream> 
#include <stdlib.h> 

struct pts 
{ 
    int x; 
    int y; 
}; 

int random(int min,int max) 
{ 
    int n=0; 
    n=(rand()%(max-min+1))+min; 
    return n; 
} 

int main() 
{ 
    struct pts p[2]; 
    int w = 600,h=400; 
    int k=0; 

    while(k<5) 
    { 
     p[0].x = random(0,h-1); 
     p[1].y = random(0,w-1); 
     std::cout << p[0].x << " " << p[1].y << "\n"; 
     k++; 
    } 
    return 0; 
} 

:

을 여기

는 루프 내부에 조금 더 "올바로 수행"일을 저장하기로 결정 적어도 때까지 작업을 수행하는 방법을 보여줍니다 완벽한 프로그램입니다
183 286 
377 115 
193 535 
186 492 
249 421 

(- 당신의 숫자가 아니라 광산 다를 수 있지만,이 같은 순서 당신에게 모든 시간을 줄 것이다 당신은 씨앗을 설정 srand를 호출하지 않기 때문에 사실과는 아마 항상는 순서를 줄 것이다) . 당신이 시작하는 더 나은베이스 라인을 원하는 경우에


, 참조 :

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

struct pts { int x; int y; }; 

int random (int min, int max) { 
    return (rand() % (max - min + 1)) + min; 
} 

int main (void) { 
    pts *p = new pts[5]; 
    int w = 600, h = 400; 
    int k = 0; 

    srand (time (0)); 
    while (k < 5) { 
     p[k].x = random (0, h - 1); 
     p[k].y = random (0, w - 1); 
     std::cout << p[k].x << " " << p[k].y << "\n"; 
     k++; 
    } 
    delete[] p; 
    return 0; 
} 

이 불필요한 물건을 제거하여 코드를 조금 단축, 당신의 정의 - 행동 문제를 제거한다.

또한 난수 생성기를 초기화하고 배열을 올바르게 채 웁니다.

+0

내가 p를 초기화 할 때 'k'값을 갖고 싶다면 어떻게해야합니까? –

+0

방금 ​​말씀하신대로했습니다. 그것은 첫 번째 값을 주었지만 나머지 4는 제공하지 않았습니다 (5 루프). –

+0

YUp ... 작동했습니다. .. 감사합니다. plus srand()가 나를 도왔습니다. –

관련 문제