排序动态数组c

时间:2017-05-29 15:50:35

标签: c sorting

typedef struct spieler* pSpieler;

struct spieler
{
   char vorname[LENGTH];
   char nachname[LENGTH];
   int rueckennummer;
   int erzielteTore;
   pSpieler pNext;
};

函数sortiereTore应该对列表中的元素进行排序,其中erzielteTore值最小的那个是第一个,值最大的那个应该是最后一个。

void sortiereTore()
{
   pSpieler pPrev = pErsterSpieler;
   pSpieler pAkt = pErsterSpieler;
   pSpieler pAfter = pAkt->pNext;
   int flag = 1;
   while(flag != 0)
   {
       flag = 0;

       while (pAfter != NULL)
       {
           if ((pAfter->erzielteTore) < (pAkt->erzielteTore))
           {
               if (pAkt == pErsterSpieler)
               {
                   pErsterSpieler = pAfter;
               }
               pAkt->pNext = pAfter->pNext;
               pAfter->pNext = pAkt;
               pPrev->pNext = pAfter;
               flag = 1;
               pPrev = pAfter;
               pAfter = pAkt->pNext;
           }
           else
           {
               pPrev = pAkt;
               pAkt = pAfter;
               pAfter = pAfter->pNext;
           }
       }

       pPrev = pErsterSpieler;
       pAkt = pErsterSpieler;
       pAfter = pAkt->pNext;

   }
}

我不知道如何解决问题,希望有人能帮助我。 非常感谢:)

1 个答案:

答案 0 :(得分:0)

让我们将此问题解释为&#34;如何调试我的程序?&#34;而不是&#34;我的计划出了什么问题?&#34;因为回答第二个问题会让你无法成为程序员。你必须学会​​自己修复bug。

调试自己的程序始终是一样的。这是关键所在:

  

您认为代码的作用与实际执行的内容之间存在差异。这会阻止您查看更改代码的位置以使其正确。

因此,分两步进行:

  1. 消除您的思维与实际发生的事情之间的差异。然后你的心智模型将与程序实际执行的内容重合,而不是你错误地认为你在思考它做了什么。

  2. 使用您对计划所做的新的,正确的知识来设计和实施针对实际行为的修复。如果您的程序接近正确,这是一个非常小的步骤。但有时候 - 如果你最初的想法远非正确 - 你可能需要抛弃你的第一次尝试并重新开始。

  3. 第1步 - 特别是对于像这样的小型学习程序 - 通常从创建可能存在错误的最小示例开始。 (因此,证明MCVE的SO实践。)然后执行程序语句逐个语句,可视化每个步骤,直到产生不良结果。
    &#34;陈述声明&#34;可以意味着使用调试器单步执行,插入print以便程序本身生成跟踪,或使用您自己的头作为处理器,使用纸和笔记忆。

      

    无论你做什么,你的努力都是 学习 ,其中程序的实际执行与你执行的想法不同。

    换句话说,你的目标是找到某些特定的声明,你想到程序将某个变量设置为某个值(或不是),它实际上是设置一个不同的值,而不是设置(或者实际设置它,当你认为它不是)。

    此时,必须达成谅解。 &#34;灯必须继续亮。&#34;掌握自己的错误会很棒。恭喜!

    然后继续第2步。

    你做得越多,你就会越好。但是你必须自己做。您无法通过要求人员为您调试来学习调试。