2017-01-15 10 views
-3
#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); 
} 

プログラムが最後まで実行されることはほとんどありません。しかし、それは2 "1"を印刷した後は常に固まった。場合によっては正しく動作し、10個の数字が表示されます。しかし、それはつらいことになる可能性が最も高いです。私はいくつかのループがあることを知っていますが、彼らはこのような長い時間のためにプログラムを停止させません。私たちは今日、すべて高速のコンピュータを持っています。だから、なぜ誰かが立ち往生するのを知っていますか?シンプルなCプログラムがスタックしました

+3

あなたの心は、[___MCVE___](http://stackoverflow.com/help/mcve)を作成しますか? –

+0

デバッガを使うか、そこにいくつかの 'printf'を置いてみて、コントロールの流れがどこに行くのか見てみましたか? –

+0

比較で '<='を使わないのはなぜですか? –

答えて

1

新しい許容数値は99未満、または99に等しくすることができませんので、あなたは、受け入れられた乱数のいずれかの最後の1が99である前にあれば、残りのループのいずれも終了することはできません、あなたのループを構成されている方法または99より大きい。

一意の乱数で並べ替えられた配列を生成し、並べ替えてstructに読み込む方が簡単かもしれません。 in_list()関数には既にリストに追加されている乱数の数が渡されるので、これらの数値だけが検索されることに注意してください。

#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 
+1

OMGありがとうありがとう!!!!!! –

+1

申し訳ありません、新しい蜂からstackoverflowへ –

関連する問題