2016-09-19 1 views
2

zu entfernen Ich bin neu in C und ich versuche, durch eine Funktion innerhalb eines Programms zu arbeiten, die die ganze Zahl 5 aus einem Array unterschiedlicher Länge entfernen würde, auch die Array danach zu unterbringen. a[0] ist das Element im Array, das die Länge dieses Arrays bestimmt. v ist das Element, das aus dem Array entfernt werden würde. Im restlichen Code sowie in allen anderen Details wird dies berücksichtigt.Erhalten unerwartetes Ergebnis beim Versuch, Element aus Array in C

Im Folgenden ist der Code, den ich für die Funktion geschrieben haben:

void delete_set(int v, int a[]) 
{ 
    int i; 
    int j; 

    for (i = 0; i < a[0]; i++) 
     if (a[i] == v) 
     { 
      for(j = i; j < a[0]; j++) 
       a[j] = a[j + 1]; 
      a[0] = a[0] - 1; 
     } 
} 

Also, ich bin nicht sicher, ob Sie den Rest des Codes außerhalb dieser Funktion sehen, müsste es Sinn zu machen, aber mein Problem ist das. Was auch immer ich a[i] == an (in der if-Anweisung), wenn die Länge des Array einlesen genau diese Zahl ist, bekomme ich eine unerwartete Antwort. Bei jeder anderen Länge des Arrays erhalten wir jedoch (korrekte) Ergebnisse. Jede Änderung in der Codierung müsste innerhalb der Funktion erfolgen, da mir dieses Problem so präsentiert wurde.

Danke, und Entschuldigung für die lange Post (wenn es ist). Ich bin es nicht gewohnt, Foren zu benutzen.

+1

Ist eine [0] die Länge des Arrays einschließlich a [0]? –

+0

'if (a [i] == v)' -> 'while (a [i] == v)' – BLUEPIXY

Antwort

2

Sie müssen das Element hält die Länge überspringen, sollte es sein: für (i = 1; i <= a[0]; i++)

+0

Danke, das funktionierte wie ein Zauber! Du konntest dir nicht vorstellen, wie lange ich durch dieses lol arbeiten musste. Oder vielleicht könntest du ... – Modrummer

+0

@Modrummer Ich habe einmal eine Woche damit verbracht, ein '' '' zu finden, das hätte ein ';' sein sollen. Ein Kollege kam herein, warf einen Blick darauf und sagte: "Du weißt, dass du ein Komma anstelle eines Semikolons hast, oder?" – Tibrogargan

2

Es ist wie Ihre äußere Schleife sieht bei a[0] an, als ob es ein tatsächliches Element Ihres Arrays waren (und nicht die Länge). Versuchen:

for (i = 1; i <= a[0]; i++) ... 

Beachten Sie auch, dass ich <= dort verwendet, denn wenn man drei Elemente haben, sie in a[1] wäre, a[2] und a[3]. Wenn Sie dies nicht tun, werden Sie Schwierigkeiten haben, das zuletzt in Ihrem Array vorhandene Element zu entfernen.

+0

Guter Fang auf dem '<=' – Tibrogargan

0

Wenn a[0] die Länge des Arrays ist, sollten Sie es entfernen? Ohne es zuerst zu speichern? Sollten Sie nicht alle Elemente des ursprünglichen Arrays verschieben? Nur einmal?

Sie sollten versuchen, Ihren Algorithmus zu refaktorieren. Tipp: Sie benötigen nur eine Schleife mit einem aktuellen Index und der Anzahl der entfernten Elemente.

0

Die innere Schleife hat auch ein Problem, wie es vom Ende des Arrays geht. Sie müssen die Position zum Ändern der Anzahl der Elemente durch die for-Schleife ersetzen, die die Elemente kopiert. Angenommen, dass [0] die Länge des Arrays ist, das eine [0] enthält, dann haben wir folgendes:

for (int i = 1; i < a[0]; ++i) { 
    if (a[i] == v) { 
     a[0] = a[0] - 1; 
     for (int j = i; j < a[0]; ++j) { 
      a[j] = a[j + 1]; 
     } 
    } 
} 
Verwandte Themen