"Übersetzung" von C in C++



  • Sweethome85 schrieb:

    [...] und habs zwar selbst probiert aber bekomm dann das Prog nicht mehr zum laufen!

    Ah, okay, wenn das so ist, machen wir dir das doch gerne.

    ...

    Natürlich nicht. Ohne sichtbare Eigeninitiative kommst du nicht weit. Aber du kannst ja mal deine Versuche aufzeigen und an konkreten Stellen nachfragen, an denen du nicht mehr weiterweisst. Und bitte nicht wieder in der Art "hier ist mein C++-Code, er kompiliert aber nicht, findet die Fehler". Man sollte sehen, dass du dich auch wirklich damit beschäftigt hast.



  • Hallo, da hast du ja schon recht, also ich versuchs jetzt nochmal (habs eben nicht gespeichert, hab mich so geärgert) und dann poste ich es wieder und zeig es dir. Darf ich dir dann noch ein paar Dinge schreiben, die ich gerne noch hätte?
    Danke



  • Sweethome85 schrieb:

    Hallo, da hast du ja schon recht, also ich versuchs jetzt nochmal (habs eben nicht gespeichert, hab mich so geärgert) und dann poste ich es wieder und zeig es dir. Darf ich dir dann noch ein paar Dinge schreiben, die ich gerne noch hätte?
    Danke

    Das ist ein Forum und nicht der Weihnachtsmann...



  • Sweethome85 schrieb:

    Hallo, da hast du ja schon recht, also ich versuchs jetzt nochmal (habs eben nicht gespeichert, hab mich so geärgert) und dann poste ich es wieder und zeig es dir. Darf ich dir dann noch ein paar Dinge schreiben, die ich gerne noch hätte?
    Danke

    klar kannst du das tun - je nach umfang der fragen und deiner eigeninitiative ist es dann mehr oder weniger wahrscheinlich, eine antwort zu bekommen - vermutlich wollte K. dir das auch sagen und ihm haben nur die richtigen Worte gefehlt...



  • Hallo,
    dachte iegntlich das man hier mehr unterstützung erfährt, es ist ja nicht so dass dies eine Hausaufgabe oder sowas ist. Will mich einfach ein wenig mit C ausseinandersetzen und brauche genau einen solchen "Zweig" in meinem Programm und ich bekomme es einfach nicht hin, da ich keinen Plan von C++ habe.
    Danke!



  • SeppJ schrieb:

    Hier dein Programm in 100% standardkonformen C++:

    Mit Sicherheit nicht 100% Standardkonform und zudem mit in einigen Teilen unter C++ unüblichen Code (Damit meine ich den Code den man in C-Konstrukten unter C++ eigentlich nicht verwendet, wie z.B. das "struct" in der Zeile "struct eintrag array[10];").

    Sei es einmal die C-Kompatibilitätsheader, die in C++ mit <c... beginnen (ohne ".h"). Oder das "system("PAUSE");" mit Sicherheit in keinem Wort im C++ Standard erwähnt wird...

    cu André



  • asc schrieb:

    SeppJ schrieb:

    Hier dein Programm in 100% standardkonformen C++:

    Mit Sicherheit nicht 100% Standardkonform und zudem mit in einigen Teilen unter C++ unüblichen Code (Damit meine ich den Code den man in C-Konstrukten unter C++ eigentlich nicht verwendet, wie z.B. das "struct" in der Zeile "struct eintrag array[10];").

    Sei es einmal die C-Kompatibilitätsheader, die in C++ mit <c... beginnen (ohne ".h"). Oder das "system("PAUSE");" mit Sicherheit in keinem Wort im C++ Standard erwähnt wird...

    wenn man das alles mal so anguckt, kommt man auf den schluss, dass er sicherlich "100%ig C-konform" meinte - system("PAUSE") ist auch standardkonform( system(const char*) ) - nur das ergebnis ist impl.-defined, oder!?

    bb


  • Mod

    Also ich hab's von mehreren Compilern pedantisch prüfen lassen. Das einzige was man ändern musste, ist %lf im printf Formatstring. Klar ist es schlechtes C++, aber es kompiliert garantiert. Header mit .h sind laut C++-Standard zwar 'depracted', aber laut Kapitel C.2.1 trotzdem enthalten. system ist ein ganz normaler Befehl den man in C++ verwenden darf und er macht das gleiche wie in C. Die Definition der structs ist zwar ebenfalls unüblich, aber ausdrücklich erlaubt.

    Also 100% C++.



  • Sweethome85 schrieb:

    dachte iegntlich das man hier mehr unterstützung erfährt, es ist ja nicht so dass dies eine Hausaufgabe oder sowas ist. Will mich einfach ein wenig mit C ausseinandersetzen und brauche genau einen solchen "Zweig" in meinem Programm und ich bekomme es einfach nicht hin, da ich keinen Plan von C++ habe.

    Das Problem ist, dass hier ständig irgendwelche Leute kommen, die glauben, in einem Forum kann man eine Aufgabe stellen und sich ein paar Stunden später die Lösung abholen. Damit meine ich jetzt nicht einmal dich - aber angesichts deiner Beschreibung im ersten Post kannst du die Reaktionen sicher nachvollziehen.

    Um die Diskussion über deine Fragestellung nicht noch weiter in die Länge zu ziehen, schlage ich vor, was ich schon von Anfang an getan habe: Zeig Eigeninitiative (Code!) und frage konkret. Wenn du wirklich nichts zu Stande bringst, werden dir auch unsere Erklärungen nicht helfen. In diesem Falle ist es am besten, du schaust dir ein gutes Grundlagenbuch an (z.B. C++-Primer oder Thinking in C++ (auch gratis als Online-PDF)). Wenn du die Sprache ernsthaft lernen willst, kommst du so oder so nicht darum herum, die Theorie zu studieren. Fang lieber jetzt damit an, in C++ werden sehr viele Dinge von Grund auf anders gehandhabt als in C. So vermeidest du einen schlechten Codestil und bruchstückartiges Halbwissen.

    asc schrieb:

    Oder das "system("PAUSE");" mit Sicherheit in keinem Wort im C++ Standard erwähnt wird...

    Bei "mit Sicherheit" würde ich etwas vorsichtiger sein. 😉

    Unter 18.7 Other runtime support wird system() mit Verweis auf die C-Standardbibliothek erwähnt. Allerdings ist die Funktion ziemlich unportabel und hat auch sonst einige Nachteile (sollten in den FAQ stehen).



  • Nexus schrieb:

    asc schrieb:

    Oder das "system("PAUSE");" mit Sicherheit in keinem Wort im C++ Standard erwähnt wird...

    Bei "mit Sicherheit" würde ich etwas vorsichtiger sein. 😉

    Es ging mir Speziell um system("PAUSE"), also mit "PAUSE" - Wobei natürlich system gültiges C++ ist, ging es mir hierbei tatsächlich um die fehlende Portabilität... Hier war ich tatsächlich etwas zu penibel, für mich ist ANSI C++ eigentlich portabel, was in diesem Fall nicht gegeben ist.



  • SeppJ schrieb:

    Kleiner Tipp: Die Aufgabe ist nicht schwer.

    Hier dein Programm in 100% standardkonformen C++:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct eintrag{
    char tiere[39];
    };
    
    struct eintrag array[10];
    
    int main()
    {
    FILE *datei;
    int err,i,n;
    
    double wertx[9];
    
    i=0;
    datei = fopen ("eingabedatei.txt", "r");
    if (datei==NULL){printf("Datei existiert nicht\n");}
    else{
    do{
    err = fscanf(datei,"%s %lf",array[i].tiere,&wertx[i]);
    printf("%s %f\n",array[i].tiere,wertx[i]);
    printf("%f\n",wertx[i]);
    i++;
    }
    while(err !=EOF && i < 10);
    }
    system("PAUSE");
    fclose(datei);
    return 0;
    }
    

    edit: Oh, da musst man tatsächlich noch was ändern für totale Standardkonformität.

    Also ich hätte es so gemacht:

    #include <string>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    
    using namespace std;
    
    struct eintrag
    {
    	string tiere;
    };
    
    eintrag array[10];
    
    int main()
    {
    	ifstream stream;
    	stream.open("eingabedatei.txt");
    	if ( stream.is_open() )
    	{
    		while ( !stream.eof() )
    		{
    			std::string buffer;
    			getline(stream, buffer);
    			stringstream ss;
    			ss << buffer;
    			string value;
    			int index = 0;
    			ss >> value;
    			ss >> index; 
    
    			std::cout << "Gelesen: " << value << " Nr. " << index << std::endl;
    			array[index].tiere = value;
    		}
    	}
    	else	
    	{
    		cerr << "Datei existiert nicht" << std::endl;
    	}
    }
    

    Datei war aufgebaut:

    Wolpertinger 0
    Bergziege 1
    Gnu 2
    

    rya.


Anmelden zum Antworten