| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1083 人关注过本帖
标题:生成一組不重複亂數的程式
只看楼主 加入收藏
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
以下是引用我爱吃青菜在2015-12-1 18:07:02的发言:

看这用词像台湾同胞呀


我是香港的同胞
2015-12-01 18:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


你看,IDE把你代碼的錯誤行指示出來,generate_lotto(L, ball_qty)裏面的L就是未經初始化的,這樣使用,在執行時L是亂指針,就會出現這個典型的画面。你的編譯器本來是不應該讓這種代碼通過的。

授人以渔,不授人以鱼。
2015-12-01 18:17
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
以下是引用TonyDeng在2015-12-1 18:17:31的发言:



你看,IDE把你代碼的錯誤行指示出來,generate_lotto(L, ball_qty)裏面的L就是未經初始化的,這樣使用,在執行時L是亂指針,就會出現這個典型的画面。你的編譯器本來是不應該讓這種代碼通過的。



難道是我的編譯器不行嗎
2015-12-01 18:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
置NULL沒用,你generate_lotto()的設計錯誤,光修正語法是不够的,程式設計思路錯了,其實還是我一開始説的你沒滿足題目要求之故。逐個添加的節點,是不需要這個函式的。

授人以渔,不授人以鱼。
2015-12-01 18:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用ms268el8在2015-12-1 18:19:01的发言:




難道是我的編譯器不行嗎

説不行有點過,至少不够好。

授人以渔,不授人以鱼。
2015-12-01 18:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
nodePointer generate_lotto(nodePointer L, int ball_qty)  /*  產生隨機數,呼叫搜尋函式,如沒有重複則呼叫插入節點函式將新的隨機數插入到串列的最後  */
{
    int generate_num, i;
    srand((unsigned)time(NULL));

    for (i = 0; i<ball_qty; i++) {
        generate_num = rand() % 49 + 1;
        while (SeqSearch(L, generate_num) != -1)
            generate_num = rand() % 49 + 1;
        L = insertLast(L, generate_num);
    }
    generate_num = rand() % 49 + 1;
    while (SeqSearch(L, generate_num) != -1)
        generate_num = rand() % 49 + 1;
    L = insertLast(L, generate_num);
    return L;
}

本來未初始化的指針傳參也可以通過在函式內部置値解决,但你的問題還是在裏面也直接使用了這個亂指針,就是描紅那裏。

授人以渔,不授人以鱼。
2015-12-01 18:31
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
以下是引用TonyDeng在2015-12-1 18:31:30的发言:

nodePointer generate_lotto(nodePointer L, int ball_qty)  /*  產生隨機數,呼叫搜尋函式,如沒有重複則呼叫插入節點函式將新的隨機數插入到串列的最後  */
{
    int generate_num, i;
    srand((unsigned)time(NULL));

    for (i = 0; i<ball_qty; i++) {
        generate_num = rand() % 49 + 1;
        while (SeqSearch(L, generate_num) != -1)
            generate_num = rand() % 49 + 1;
        L = insertLast(L, generate_num);
    }
    generate_num = rand() % 49 + 1;
    while (SeqSearch(L, generate_num) != -1)
        generate_num = rand() % 49 + 1;
    L = insertLast(L, generate_num);
    return L;
}

本來未初始化的指針傳參也可以通過在函式內部置値解决,但你的問題還是在裏面也直接使用了這個亂指針,就是描紅那裏。


謝謝TonyDeng大大,但我是時候要上班,讓我再研究一下,晚點再請你賜教,感激不盡
2015-12-01 18:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我晚上也上班,你慢慢琢磨吧。

授人以渔,不授人以鱼。
2015-12-01 18:39
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
TonyDeng大大,我剛剛改寫了SeqSearch函式,如下:
int SeqSearch(nodePointer L, int d)  /*  搜尋新產生的隨機數是否有重複  */
{
     nodePointer Trace;
     Trace=L;
     if(Trace==NULL)
          return -1;
     while(Trace->link!=NULL) {
         if(Trace->data==d)
             return 0;
         else
         Trace=Trace->link;
    }
    return -1;
}
然後在手機上的編譯器app測試成功了
在電腦上不知道能否成功,因為我在上班沒有電腦
2015-12-01 21:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
雖然彆扭了一點,但也能通。

授人以渔,不授人以鱼。
2015-12-01 22:18
快速回复:生成一組不重複亂數的程式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021627 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved