Frage zu Arrays



  • An Swordfish

    Denn Fehlerbericht kann ich auch lesen und brauche dazu keine Übersetzung und wer lesen kann, habe ich folgendes am 10.05.2017 geschrieben:

    "Habe den letzten Code mal in Visual Studio c++ 2010 in einer CLR-Konsolenanwendung nachgebaut (reingesetzt)."

    Also im Klartext den Code von theta der er am 05.05.2017 um 13:47:02Uhr bereit gestellt wurde.

    Und bezüglich nachlabern was man lernen sollte, kannst dir auch ersparen.

    Ich muss hier keinen kunt tun was ich vorher an Sprachen gelernt habe.

    Was ich hier suche sind klare Lösungswege und keine Krümel.
    Wo man sich klar gedanken zu machen kann wie es theta gemacht hat.
    Wo man sehen kann wie es richtig gemacht wird, damit der Code funktioniert.

    OK, wenn theta im Code sich vertann hat, dann ist es so.
    Dann braucht man nicht drauf rum hakken sondern klar sagen wie der Code auszusehen hat. Um Fehler zu erkennen.

    Also bitte klare und verständliche Lösungen, wie der Code zu ändern ist damit der Fehler weg ist.
    Damit auch die jenigen es lernen können die es noch nicht können.
    Also zeigen mit Code Beispielen.



  • Ich fürchte VS 2010 kann noch kein auto bzw. es hat dort eine andere Bedeutung. Das heisst man muss den Typen explizit angeben.

    Beispiel: Anstatt auto zuhause = gcnew Adresse; einfach Adresse^ zuhause = gcnew Adresse; schreiben.



  • Danke theta
    für deine Info und bemühen.
    Es würde mich freuen auch weiterhin von dir zu hören.
    Bei meinen nächsten Fragen die bestimmt noch kommen werden.

    Ich habe es alleine so gelöst bekommen:

    using namespace System;
    using namespace System::Collections::Generic;
    
    ref struct Adresse
    {
        property String^ Strasse;
        property int Postleitzahl;
        property String^ Ort;
    };
    
    int main(array<System::String ^> ^args)
    {
        auto zuhause = gcnew Adresse;
        zuhause->Strasse = "Time Square 57";
        zuhause->Postleitzahl = 10036;
        zuhause->Ort = "New York City";
    
        auto adressen = gcnew List<Adresse^>;
        adressen->Add(zuhause);
    
        while (true)
        {
            Console::Write("Neue Adresse hinzufügen? Ja ('j') oder Nein ('n'): ");
            auto hinzufuegenJaNein = Console::ReadLine();
            if (hinzufuegenJaNein->StartsWith("j"))
            {
                auto neueAdresse = gcnew Adresse;
    
                Console::Write("Gib die Strasse ein: ");
                neueAdresse->Strasse = Console::ReadLine();
    
                Console::Write("Gib die Postleitzahl ein (nur Zahlen erlaubt): ");
                auto postleitzahlEingabe = Console::ReadLine();
                auto postleitzahl = 0;
                if (int::TryParse(postleitzahlEingabe, postleitzahl))
                {
                    neueAdresse->Postleitzahl = postleitzahl;
                }
                else
                {
                    Console::WriteLine("Die Eingabe wurde nicht akzeptiert, die Adresse wird nicht hinzugefügt");
    
                    continue;
                }
    
                Console::Write("Gib den Ort ein: ");
                neueAdresse->Ort = Console::ReadLine();
    
                adressen->Add(neueAdresse);
            }
            else if (hinzufuegenJaNein->StartsWith("n"))
            {
                break;
            }
            else
            {
                Console::WriteLine("Die Eingabe wurde nicht akzeptiert, bitte erneut eingeben");
            }
        }
    
        /*
    	Die Zeilen in diesem Kommentar sind falsch:
    
    	for each (auto adresse in adressen)
        {
            Console::WriteLine("{0}, {1} {2}", adresse->Strasse, adresse->Postleitzahl, adresse->Ort);
        }
    
    	Die Zeilen gegen diese ausgetauscht:
    	*/
    
    	for(int i=0; i<adressen->Count; ++i)
    		 Console::WriteLine(i+" {0}, {1} {2}", adressen[i]->Strasse, adressen[i]->Postleitzahl, adressen[i]->Ort);
    
    	Console::WriteLine("");
    	Console::WriteLine("Eine Taste betätigen um zu beenden.");
    	Console::ReadLine();
    
        return 0;
    }
    


  • Swordfish schrieb:

    oder, Wutzmode: Dummer stümperhafter Narr! Lern C. 👍

    👍



  • Cospieler schrieb:

    ...

    Dann liegt es wohl an auto im Zusammenhang mit for each und ist wohl ein Bug von VS2010.

    Das dürfte auch funktionieren:

    for each (Adresse^ adresse in adressen)
    {
        Console::WriteLine("{0}, {1} {2}", adresse->Strasse, adresse->Postleitzahl, adresse->Ort);
    }
    


  • Cospieler schrieb:

    Ich muss hier keinen kunt tun was ich vorher an Sprachen gelernt habe.

    Ne. Gott sei dank nicht.

    Cospieler schrieb:

    Also bitte klare und verständliche Lösungen, wie der Code zu ändern ist damit der Fehler weg ist.

    auf welchem niveau behältst du bei dieser herangehensweise besser auch für dich 👍

    "Du musst dort statt auto einen konkreten Typ angeben." hab ich dir auch schon gesagt. mehr hat theta auch nicht gesagt. baby.



  • An theta

    Danke für die Info.

    Habe den Code wie folgt geändert, getestet und läuft.

    using namespace System;
    using namespace System::Collections::Generic;
    
    ref struct Adresse
    {
        property String^ Strasse;
        property int Postleitzahl;
        property String^ Ort;
    };
    
    int main(array<System::String ^> ^args)
    {
        auto zuhause = gcnew Adresse;
        zuhause->Strasse = "Time Square 57";
        zuhause->Postleitzahl = 10036;
        zuhause->Ort = "New York City";
    
        auto adressen = gcnew List<Adresse^>;
        adressen->Add(zuhause);
    
        while (true)
        {
            Console::Write("Neue Adresse hinzufügen? Ja ('j') oder Nein ('n'): ");
            auto hinzufuegenJaNein = Console::ReadLine();
            if (hinzufuegenJaNein->StartsWith("j"))
            {
                auto neueAdresse = gcnew Adresse;
    
                Console::Write("Gib die Strasse ein: ");
                neueAdresse->Strasse = Console::ReadLine();
    
                Console::Write("Gib die Postleitzahl ein (nur Zahlen erlaubt): ");
                auto postleitzahlEingabe = Console::ReadLine();
                auto postleitzahl = 0;
                if (int::TryParse(postleitzahlEingabe, postleitzahl))
                {
                    neueAdresse->Postleitzahl = postleitzahl;
                }
                else
                {
                    Console::WriteLine("Die Eingabe wurde nicht akzeptiert, die Adresse wird nicht hinzugefügt");
    
                    continue;
                }
    
                Console::Write("Gib den Ort ein: ");
                neueAdresse->Ort = Console::ReadLine();
    
                adressen->Add(neueAdresse);
            }
            else if (hinzufuegenJaNein->StartsWith("n"))
            {
                break;
            }
            else
            {
                Console::WriteLine("Die Eingabe wurde nicht akzeptiert, bitte erneut eingeben");
            }
        }
    
        /*
    	Die Zeilen in diesem Kommentar sind falsch:
    
    	for each (auto adresse in adressen)
        {
            Console::WriteLine("{0}, {1} {2}", adresse->Strasse, adresse->Postleitzahl, adresse->Ort);
        }
    
    	Die Zeilen gegen diese ausgetauscht:
    	*/
    
    	for each (Adresse^ adresse in adressen)
    	{
    		Console::WriteLine("{0}, {1} {2}", adresse->Strasse, adresse->Postleitzahl, adresse->Ort);
    	}
    
    	/*
    	Die Zeilen gehen auch:
    	for(int i=0; i<adressen->Count; ++i)
    		 Console::WriteLine(i+" {0}, {1} {2}", adressen[i]->Strasse, adressen[i]->Postleitzahl, adressen[i]->Ort);
    	*/
    
    	Console::WriteLine("");
    	Console::WriteLine("Eine Taste betätigen um zu beenden.");
    	Console::ReadLine();
    
        return 0;
    }
    

    An Swordfish

    Will mit dir das Beleidigungsniveau nicht weiter fahren.

    Nur eins dazu, jeder fängt mal klein an und du gehst leider direkt von einem viel zu großen Wissenstand aus.
    Darum kann ich nur sagen das thetas Erklärungen viel einfacher zu verstehen sind.
    Das ist der feine Unterschied zwischen euch beiden.
    Mag sein das du helfen möchtest, ist auch gut so.
    Aber dann passe bitte deine Wortwahl dem Niveau an.
    Damit auch anderen eine bessere Change gegeben werden kann, ein Erfolg zu sehen.

    Ich verstehe auch deine Ansage zu C und C++.
    Habe auch in C programmiert, aber in eclipse.
    Und nur kleine Projekte.
    Mag sein das der Übergang zu C++ noch zu früh ist.
    Aber lass es mich doch einfach versuchen.
    Wenn ich es nicht schaffe, werde ich mich weiter nur mit C beschäftigen.

    Und ja, ich lese nicht nur Bücher.

    Also lasse uns bitte unser Streitigkeiten vergessen und neu starten OK?



  • Cospieler schrieb:

    Habe auch in C programmiert, aber in eclipse.
    Mag sein das der Übergang zu C++ noch zu früh ist.
    Wenn ich es nicht schaffe, werde ich mich weiter nur mit C beschäftigen.

    Diese Aussagen erwecken bei mir den Eindruck, dass du glaubst, man muss zuerst C programmieren lernen, um sich dann an C++ heranwagen zu können/dürfen.

    Dies halte ich für grundfalsch - C ist nicht C++, auch wenn C und C++ Überschneidungen haben und eine sehr gute Interoperabilität aufweisen. Aber der moderne Stil mit C++ zu programmieren, deckt sich überhaupt nicht mit den Dingen, die man in C üblicherweise anwendet (umgekehrt auch).

    Acuh die Annahme - von der ich nicht weiss, ob du sie auch getroffen hast -, man müsse in C++ zuerst manuelle Speicherverwaltung lernen, mit C-Arrays und C-Strings herumhantieren, um später gut C++ programmieren zu können, ist ein anderer, weit verbreiteter Irrtum. Das Gegenteil ist der Fall!

    Soviel zu C und C++. Dass du in den zitierten Aussagen C++ und nicht C++/CLI erwähnst, lassen mich zudem annehmen, dass du C++ und C++/CLI für dieselbe Sprache hältst. Das ist keineswegs der Fall. Der Unterschied zwischen C++ und C++/CLI ist sogar noch viel grösser als zwischen C und C++. Und auch hier ist eine sehr gute und gewünschte Interoperabilität vorhanden.

    So, und zum Lernen der Programmierung ansich denke ich, dass man es sich einfacher oder schwieriger machen kann. Du wählst eher die harte Tour, weil die Umgebung rund um C++/CLI einfach wahnsinnig viele Fallstricke bietet, funktioniert aber auch - im besten Fall lernt man noch viele zusätzliche Dinge, weil man länger im "Sumpf" rumwaten muss. 😉



  • An Theta

    Danke für deine Meinung.

    Also, warum ich mich damals für C entschieden hatte, war das ich in manch anderen Foren, gelesen hatte das man in C anfangen sollte bevor man in C++ einsteigt.
    Aber da hat jeder seine eigene Meinung.
    Daraufhin habe ich einfach mal mit C angefangen mit kleinen Projekten.
    Aber jetzt interessiere ich mich halt für C++/CLI und lese auch Bücher darüber.
    Aber manches ist nicht so gut beschrieben und darum kam ich in dieses Forum.

    Ja habe schon verstanden das C++ nicht gleich C++/CLI ist und meinte eigentlich auch C++/CLI nicht C++ im der letzten Nachricht.
    Aber die Ausmaße wie sicher tatsächlich die Codesprachen sind.
    Kann ich mir noch kein Bild machen, nur von Hören sagen.
    Darum will ich mir mein eigenes Bild machen und habe einfach mal angefangen in C++/CLI.

    Auch mit Arrays habe ich schon einige Erfahrungen gemacht.



  • 👍



  • Hallo zusammen,

    kann man den Code auch so anpassen des er ohne "auto" auskommt?
    Aber das gleiche Ergebnis bringt.
    Wenn ja, wie?


  • Global Moderator

    Dadurch, dass du die Frage wiederholst, wird die richtige Antwort auch keine andere. Die richtige Antwort wurde schon mehrmals vor vielen Monaten gegeben.



  • Statt auto einen konkreten Typ angeben, ist schon klar.
    Aber int und String kann ich doch nicht mischen.
    Ohne weiteres.


  • Global Moderator

    1. Wer sagt etwas von Mischen? Den richtigen Typen! Es gibt nur einen.
    2. Postleitzahl als int ist sowieso Schrott. Frag mal die Leute in 01067 Dresden



  • Das was du sagt ist schon klar. Daufhin möchte ich auch nicht raus.

    Versuch es anderes zu erklären.

    Ich möchte eine Zahl und String speichern.

    z.B. in dieser form:

    using namespace System;
    using namespace System::Collections::Generic;
    
    ref struct Datenpacket
    {
        property String^ Name;
        property int Nummer;
    };
    
    int main(array<System::String ^> ^args)
    {
        auto Daten = gcnew Datenpacket;
        Daten->Name = "Paul";
        Daten->Nummer = 1;
    
        auto Datenpackete = gcnew List<Datenpacket^>;
        Datenpackete->Add(zuhause);
    .
    .
    .
    usw.
    .
    .
    .
    

    so und jetzt ohne "auto"


  • Global Moderator

    Was ist denn jeweils der Typ von gcnew Datenpacket und gcnew List<Datenpacket^> ?



  • Ja so stehe ich auch davor.

    Der vorherige Code der auch im vollen Umfang die Adressen hatte lief ja auch so.

    Dieser neue Code ist nur eine abgewandelte form davon, weil es mir nur darum ging wie ich den Code umpusseln muss um ohne auto auszukommen.

    Kann du mir ein Beispiel geben wie ich es besser machen kann?
    So das ich ohne auto auskomme.

    Nur eins zu List<Datenpacket^> dort ist int Wert und string Wert enthalten.
    So meine ich es verstanden zu haben.
    Ansonsten bitte ich um Aufklärung.


  • Global Moderator

    Ich habe nicht den Eindruck, dass dir eine Korrektur des Codes helfen würde. Beziehungsweise sie würde dir helfen, aber sie würde uns nicht helfen, denn du wärst sofort wieder hier mit exakt dem gleichen Problem, weil du nichts gelernt hättest. Ich stelle folgendes fest:

    • Du hast die Frage vor knapp 2 Monaten gestellt.
    • Du hast damals gesagt, du wollest C++/CLI mit .NET lernen, obwohl dir davon dringend abgeraten wurde.

    In den zwei Monaten hast du:

    • Absolut 0 Lernfortschritt gemacht. Die Frage die du hier stellst ist eine super-simple Anfängerfrage, die du nach 2 Monaten angeblichen Lernens immer noch hast.
    • Sämtliche Ratschläge, die dir gegeben wurden, komplett ignoriert, außer sie waren kopierbarer Beispielcode. Selbst den kopierbaren Beispielcode hast du nicht zum Laufen gebracht.
    • Nicht einmal gelernt zu googeln. Ich spreche nicht C++/CLI mit .NET. Trotzdem könnte ich dir die richtigen Typen nennen, mit all den komischen C++/CLI-Spezialitäten, von denen ich eigentlich keine Ahnung habe. Wie habe ich das wohl gemacht?

    Folgerung: Jegliche Hilfestellung führt zu nichts. Man muss zu lernen bereit sein, damit man lernen kann.