简单C程序卡住了 #包括“stdio.h” #包括“stdlib.h” #包括“time.h” int main() { printf(“\n1”); srand((无符号)时间(NULL)); printf(“\n1”); 结构节点{ int-Digi; 结构节点*Prev; 结构节点*下一步; }; printf(“\n1”); 结构节点Num1、Num2、Num3、Num4、Num5、Num6、Num7、Num8、Num9、Num10、NumAdd; Num1.Digi=rand()%100; Num1.Prev=NULL; 做{ Num2.Digi=rand()%100; }而((Num2.Digi

简单C程序卡住了 #包括“stdio.h” #包括“stdlib.h” #包括“time.h” int main() { printf(“\n1”); srand((无符号)时间(NULL)); printf(“\n1”); 结构节点{ int-Digi; 结构节点*Prev; 结构节点*下一步; }; printf(“\n1”); 结构节点Num1、Num2、Num3、Num4、Num5、Num6、Num7、Num8、Num9、Num10、NumAdd; Num1.Digi=rand()%100; Num1.Prev=NULL; 做{ Num2.Digi=rand()%100; }而((Num2.Digi,c,C,程序很少运行到最后。但它总是在打印出2“1”后卡住。有时它会正确运行并显示10个数字。但最有可能的是它被卡住了。我知道有一些循环,但它们不会导致程序停滞这么长时间。现在我们都有速度快的电脑。那么,有人知道它为什么会卡住吗?按照您构建循环的方式,如果在最后一个循环之前接受的任意随机数是99,则剩余的循环都不能终止,因为新的可接受数不能小于99,或等于99,或大于99 生成一个填充了唯一随机数的数组,进行排序,然后将其读入structs可能会更简单。请注意,in_list()函数传递已添加到列表中的

程序很少运行到最后。但它总是在打印出2“1”后卡住。有时它会正确运行并显示10个数字。但最有可能的是它被卡住了。我知道有一些循环,但它们不会导致程序停滞这么长时间。现在我们都有速度快的电脑。那么,有人知道它为什么会卡住吗?

按照您构建循环的方式,如果在最后一个循环之前接受的任意随机数是
99
,则剩余的循环都不能终止,因为新的可接受数不能小于
99
,或等于
99
,或大于
99

生成一个填充了唯一随机数的数组,进行排序,然后将其读入
struct
s可能会更简单。请注意,
in_list()
函数传递已添加到列表中的随机数的计数,以便只搜索这些数字

#include "stdio.h"
#include "stdlib.h"
#include "time.h"

int main()
{
    printf("\n1");

    srand ((unsigned)time(NULL));

    printf("\n1");

    struct node {
        int Digi;
        struct node *Prev;
        struct node *Next;
    };

    printf("\n1");

    struct node Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num10,NumAdd;

    Num1.Digi = rand() % 100;
    Num1.Prev = NULL;
    do {
        Num2.Digi = rand() % 100;
    } while ((Num2.Digi < Num1.Digi) || (Num2.Digi == Num1.Digi));

    Num2.Prev = &Num1;
    Num1.Next = &Num2;

    do
        Num3.Digi = rand() % 100;
    while ((Num3.Digi < Num2.Digi) || (Num3.Digi == Num2.Digi));

    Num3.Prev = &Num2;
    Num2.Next = &Num3;

    do
        Num4.Digi = rand() % 100;
    while ((Num4.Digi < Num3.Digi) || (Num4.Digi == Num3.Digi));

    Num3.Prev = &Num4;
    Num3.Next = &Num3;

    do
        Num5.Digi = rand() % 100;
    while ((Num5.Digi < Num4.Digi) || (Num5.Digi == Num4.Digi));

    Num5.Prev = &Num4;
    Num4.Next = &Num5;

    do
        Num6.Digi = rand() % 100;
    while ((Num6.Digi < Num5.Digi) || (Num6.Digi == Num5.Digi));

    Num6.Prev = &Num5;
    Num5.Next = &Num6;

    do
        Num7.Digi = rand() % 100;
    while ((Num7.Digi < Num6.Digi) || (Num7.Digi == Num6.Digi));

    Num7.Prev = &Num6;
    Num6.Next = &Num7;

    do
        Num8.Digi = rand() % 100;
    while ((Num8.Digi < Num7.Digi) || (Num8.Digi == Num7.Digi));

    Num8.Prev = &Num7;
    Num7.Next = &Num8;

    do
        Num9.Digi = rand() % 100;
    while ((Num9.Digi < Num8.Digi) || (Num9.Digi == Num8.Digi));

    Num8.Prev = &Num9;
    Num9.Next = &Num8;

    do
        Num10.Digi = rand() % 100;
    while ((Num10.Digi < Num9.Digi) || (Num10.Digi == Num9.Digi));

    Num10.Prev = &Num9;
    Num9.Next = &Num10;
    Num10.Next = NULL;
    printf("\n1");
    printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
           Num1.Digi, Num2.Digi, Num3.Digi, Num4.Digi, Num5.Digi,
           Num6.Digi, Num7.Digi, Num8.Digi, Num9.Digi, Num10.Digi);
}

您介意创建一个吗?您是否尝试使用调试器或在其中放置一些
printf
来查看控制流的去向?为什么不使用
例如
Num1.Digi
成为
99
。如果最后一个之前的任何数字是
99
,则剩余的循环无法终止。对不起,新的bee将导致堆栈溢出
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

bool in_list(int num, int arr[], size_t list_sz)
{
    size_t i;
    for (i = 0; i < list_sz; i++) {
        if (arr[i] == num) {
            break;
        }
    }

    return i < list_sz ? true : false;
}

int compare(const void *x, const void *y) {
    const int *cx = (const int *) x;
    const int *cy = (const int *) y;

    return (*cx > *cy) - (*cx < *cy);
}

int main(void)
{
    int random_numbers[10];
    int num;

    srand(time(NULL));

    for (size_t i = 0; i < 10; i++) {
        do {
            num = rand() % 100;
        }while (in_list(num, random_numbers, i));
        random_numbers[i] = num;
    }

    qsort(random_numbers, 10, sizeof(int), compare);

    for (size_t i = 0; i < 10; i++) {
        printf("%d\n", random_numbers[i]);
    }

    return 0;
}
0
19
20
29
30
56
58
72
82
86