帕斯卡尔 - 我的计划似乎崩溃了,但它还在......跑步

时间:2018-05-30 07:14:52

标签: loops pascal

我正在为我的评估写一个音乐播放器。目前我需要制作它以便曲目按顺序播放。

目前播放音乐的位看起来像这样:

repeat
//Other code that's related to responding to user input
while i < trackCount - 1 do
    begin
        if not MusicPlaying() then
        begin
            PlayMusic(trackName, 1);
            trackNumber := trackNumber + 1;
            i := i + 1;
        end;
    end;
until WindowCloseRequested();

基本上它会说&#34;虽然列表尚未完成,但如果没有播放音乐,则播放曲目并增加i以便下一首曲目可以播放一次&#39完成&#34;。显然,这使程序崩溃了,或者看起来似乎无论如何。一旦我上场,我就无法与该节目进行互动,但音乐仍在按顺序播放,这告诉我逻辑运作正常。程序确实在之后恢复正常,但在我尝试再次播放列表时返回到同一状态。这是否意味着它是一个糟糕的代码,我应该尝试以不同的方式思考它?或者有什么我不知道在循环中有一个循环吗?

1 个答案:

答案 0 :(得分:1)

不,你的程序并没有真正崩溃,它只是在while i < trackCount - 1 do循环中停留。

i仅在MusicPlaying()返回false时才会更改(递增),这可能只是最初发生,然后在曲目播放完毕后发生。所有这段时间之间,您的程序被while循环捕获,只是反复等待MusicPlaying()返回false,因此看起来没有响应。

我怀疑repeat..until循环是程序的主循环。如果是这样,那么您只需将单词while更改为if即可。

repeat
    // Other code that's related to responding to user input
    if i < trackCount - 1 do
    begin
        if not MusicPlaying() then
        begin
            PlayMusic(trackName, 1);
            trackNumber := trackNumber + 1;
            i := i + 1;
        end;
    end;
until WindowCloseRequested();