Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 而循环工作不正常_Loops_While Loop - Fatal编程技术网

Loops 而循环工作不正常

Loops 而循环工作不正常,loops,while-loop,Loops,While Loop,在下面的程序中,当程序进入while循环时,它停止工作。当我尝试在没有循环的情况下分配值时,效果很好。 有人能告诉我问题出在哪里吗? 我正在使用VisualStudio2010 #include <stdio.h> #include<iostream.h> #include <conio.h> using namespace std; int random(int min,int max); struct pts { int x; int

在下面的程序中,当程序进入while循环时,它停止工作。当我尝试在没有循环的情况下分配值时,效果很好。 有人能告诉我问题出在哪里吗? 我正在使用VisualStudio2010

#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;
}
#包括
#包括
#包括
使用名称空间std;
int随机(int最小值,int最大值);
结构pts
{
int x;
int-y;
};
int main()
{
结构pts*p;
int w=600,h=400;
int nmax,kmax,k=0,n=0;

while(kwhile
while
循环本身工作正常。只是您正在破坏内存。您的问题在于:

struct pts *p;
p[0].x = whatever;
无需将
p
设置为有效内存块。换句话说,您使用的是统一化指针,因此行为未定义,因此所有下注均无效

由于您(当前)似乎只在使用
p[0]
p[1]
,您可能可以更改:

struct pts *p;
致:

当然,如果您想要可变结构,可以使用:

struct pts *p = new pts[500];
当然,用你想要的尺寸替换500


您可能还想考虑升级到一个更新近的编译器,<代码> IoStudio.H和 CONIO.H./COD>是过时的。

下面是一个完整的程序,演示如何执行此操作,至少在您决定在循环中更“理智”地存储内容之前:

#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;
}
(事实上,我可能总是给出那个序列,因为你不会调用
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;
}
#包括
#包括
#包括
结构pts{intx;inty;};
int随机(int最小值,int最大值){
返回值(rand()%(max-min+1))+min;
}
内部主(空){
pts*p=新pts[5];
int w=600,h=400;
int k=0;
srand(时间(0));
而(k<5){
p[k].x=random(0,h-1);
p[k].y=random(0,w-1);

std::cout如果我想在p中有一些'k'值,我应该全部初始化吗?我只是按照你说的做了。它给出了第一个值,但没有给出其余的4(5的循环)。
183   286
377   115
193   535
186   492
249   421
#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;
}