Problem beim Ausgeben



  • die for-Schleife mit dem Zähler v habe ich so probiert, es funzt aber net.



  • Meinst du diesen Block?

    for (int v=0; v<50; v++)
    {if (v>MitgliedNr)
    {Zaehler--;}}
    

    Der zählt nur die Variable "Zaehler" runter - um die entstehende Lücke zu füllen, mußt du alle nachfolgenden Elemente umkopieren.



  • Abgesehen davon dass das etwas realitätsfern ist, eine Mitgliedsnummer zu verändern (sie ist taug dann als ID nicht viel, weil sie sich ändert...).

    Spar dir die Nummer und zeige den Index des Mitgliedseintrags als Nummer an. Dann aktualisiert sich die Nummer automatisch.



  • Es ist keine Mitgliedsnummer in dem Sinn von einer fest zugeordneten Nr. In meinem Prog ist es nur eine temporäre Nummer (die Position des Mitglieds).
    Habe dies

    for(i=loeschNr+1;i<gesamtNr;++i)
      Mitglied[i-1]=Mtiglied[i];
    Mitglied[--gesamtNr]=(leer);
    

    auf mein Programm übertragen.
    Sieht jetzt so aus:

    for(int i=MitgliedNr+1; i<gesNr; ++i) 
    	{Mitglied[i-1]=Mitglied[i]; 
    	--(Mitglied[gesNr])=(); }
    

    (gesNr habe ich global als const int mit dem Wert 50 definiert)
    und da kommen folgende Fehler:

    error C2675: Unärer Operator '--': 'Mitglieddetails' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht

    error C2059: Syntaxfehler: ')'

    Was habe ich sooooo schlimmes getan, dass man es mir antut, sowas programmieren zu müssen???????



  • Mathias schrieb:

    Spar dir die Nummer und zeige den Index des Mitgliedseintrags als Nummer an. Dann aktualisiert sich die Nummer automatisch.

    aber genau das mache ich doch.... ich habe als Index die Variable "Zaehler", und diese zeige ich auch als Nummer an. Aber so ändert sich das leider nicht.



  • Vergleich mal meinen Text mit dem, was du dort fabriziert hast 😉 (btw, gesNr sollte ein nicht-konstanter Wert sein, der den aktuellen Füllstand deines Arrays angibt).

    Und anstelle des "...=(leer);" mußt du natürlich deinen Weg einsetzen, einen Datensatz als "unbelegt" zu kennzeichnen.



  • k, jetzt habe ich das so gemacht, aber jetzt wird nurnoch der 1. eintrag angezeigt, der 3., der ja zum 2. werden soll, garnicht mehr; er ist garnicht mehr vorhanden, die datensätze 2 und 3 sind beide leer.



  • *sich den Code näher ansehe*

    Hmmm ich glaube du machst das generell sehr umständlich.... Zeichenketten sind in C/C++ so definiert, dass sie mit dem Zeichen '\0' beendet werden.
    Wenn du dies beachtest kannst du sie direkt mit cout rausschreiben ohne zig Schleifen programmieren zu müssen.
    Gleiches gilt für das Löschen. Es ist in dem Fall dann nur noch notwendig das erste Zeichen mit einem '\0' zu überschreiben.

    Da du die Mitglieder nicht wirklich löschst, sondern nur leerst kanst du natürlich nicht den Index als Mitgliedernummer verwenden. Du hast schließlich immer noch deine 50 Einträge. Du must dir innerhalb der Schleife mitzählen der wievielte gültige Eintrag es ist.

    Ansonsten verwendet man in C++ lieber std::vector anstelle von Arrays. 🙂
    Da kann man die Einträge auch wirklich löschen und auch Einträge hinzufügen.



  • muss das alles so kompliziert sein?
    ich war so froh, dass das Prog gelaufen ist. Nur diese eine Sache wollte ich noch ändern, sonst bin ich ja mittlerweile sehr zufrieden.
    Ich habe nur Anfängerkenntnisse, soll aber eine C++-Einsteiger-Schulung machen. Und das soll die Abschlussprüfung werden. Das blöde daran ist nur, dass ich vor einem Jahr auch so eine Schulung mitgemacht habe, und da hab ich die Abshclussprüfung an einem Tag hinbekommen (es kamen zwar keine Funktionen vor, aber sonst alles, was ich auch verwendet habe). Ich bin jetzt schon am 4. Tag am basteln und will langsam nicht mehr.........

    Und langsam seh ich vor leiter c++ garnix mehr und habe ein richtiges blackout. und ehrlich gesagt will ich an dem code nicht mehr viel ändern, weil ich das mit der Abbruchbedingung auch noch garnicht einbringen will, das kommt erst, wenn ich die Erweiterung erstelle.
    Und jetzt muss ich ne Lösung finden, das irgendwie so hinzubekommen.
    Weißt du, wie ich diese Schleife abändern muss, damit es funzt?
    Ich habe se jetzt aktuell so in meinem Prog:

    for(int i=MitgliedNr+1; i<gesNr; ++i) 
    	{Mitglied[i-1]=Mitglied[i]; 
    	Mitglied[--gesNr].Name[0]=' '; }
    

    Ist es überhaupt richtig die gesNr als int zu definieren und mit der zahl 50 zu initialisieren?



  • Nein, gesNr belegst du immer mit der tatsächlichen Anzahl an Datensätzen (also - wenn du drei Personen eingetragen hast, steht dort drin 3, wenn eine gelöscht wird, bleibt 2 übrig).



  • aber trotzdem funzt es bei mir nicht, ich glaube ich lasse das einfach weg. dann steht halt 0. und danach 2. ist mir langsam auch egal, aber trotzdem danke



  • wenn ich es so lasse, wie ich es wollte, speichert er neue einträge, nachdem ich etwas gelöscht habe, aber nicht mehr. normalerweise wird bei der funktion MitgliedNeu zuerst das erste leere feldelement gesucht. und dort soll er die daten reinschreiben. macht er aber net. er schreibt es nirgends rein.
    erklärt sich jmd. dazu bereit, sich mal meinen gesamtcode anzuschauen, woran das liegt. da er über 500 zeilen lang ist, am besten per mail


Anmelden zum Antworten