비주얼 스튜디오를 사용하고 있습니다. 그것은 당신이 기억을 부패시키는 것입니다. 유효한 메모리 블록에 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.h
및 conio.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;
}
이 불필요한 물건을 제거하여 코드를 조금 단축, 당신의 정의 - 행동 문제를 제거한다.
또한 난수 생성기를 초기화하고 배열을 올바르게 채 웁니다.
내가 p를 초기화 할 때 'k'값을 갖고 싶다면 어떻게해야합니까? –
방금 말씀하신대로했습니다. 그것은 첫 번째 값을 주었지만 나머지 4는 제공하지 않았습니다 (5 루프). –
YUp ... 작동했습니다. .. 감사합니다. plus srand()가 나를 도왔습니다. –