Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ANSI C++ Code (Sinnvoll?)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.05.2018, 21:08 Uhr
m.sc.m



Hi zusammen!


Ich habe folgenden Code von einem Professor in Elektrotechnik im Modul Softwareengeniering (mit C++) bekommen.

Da möchte ich gerne eure Meinung zu hören.

Also allgemein zum Code und ob man C Code in C++ verwenden sollte.

Danke im voraus!


C++:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

// Alte Datenstruktur: "lose Variablensammlung"...
float liter, kilometer, euro, verbrauch, eur_pro_liter;
FILE *outfile_ptr;
int scan_zahl;
unsigned int merker_erste_schleife =1;

// Fortgeschrittene Datenstruktur
struct fb_zeile {

    int tag, monat, jahr;
    float liter, kilometer, euro, verbrauch, eur_pro_liter;
};

fb_zeile z1, z2, z3, z4, z5;
fb_zeile fb_tabelle [5];
    int eingabefunktion_scan_int (int anzahl_wiederholer, int * einlese_var_int_ptr);
    int eingabefunktion_scan_float (int anzahl_wiederholer, float * einlese_var_int_ptr);
int main()
{

    printf ("Hallo, das ist das neue etwas komfortablere Fahrtenbuch-Programm  \n");
    printf ("Geben Sie bis zu max. 5 Tankbelege ein! \n\n");

    for (int i=0; i<5; i++)
    {
    
        printf ("\nBitte geben Sie das Datum ein, zuerst den Tag!\n");
        eingabefunktion_scan_int (2, &fb_tabelle[i].tag);

        printf ("\nBitte geben Sie das Datum ein, jetzt den Monat!\n");
        eingabefunktion_scan_int (2, &fb_tabelle[i].monat);

        printf ("\nBitte geben Sie das Datum ein, jetzt das Jahr!\n");
        eingabefunktion_scan_int (5, &fb_tabelle[i].monat);

        printf ("\nBitte geben Sie die getankten Liter ein!\n");
        eingabefunktion_scan_float (5, &fb_tabelle[i].liter);

        // Abbruch mit break, wenn Literzahl kleiner Null
        if (liter<0) break;

        printf ("\nBitte geben Sie gefahrenen Kilometer ein!\n");
        eingabefunktion_scan_float (5, &fb_tabelle[i].kilometer);

        printf ("\nBitte geben Sie den bezahlten Betrag in Euro ein!\n");
        eingabefunktion_scan_float (5, &fb_tabelle[i].euro);

        /* Berechnung Verbrauch */
        fb_tabelle[i].verbrauch = fb_tabelle[i].liter/fb_tabelle[i].kilometer * 100;

        /* Berechnung Euro/Liter */
        fb_tabelle[i].eur_pro_liter = fb_tabelle[i].euro/fb_tabelle[i].liter;

        /* Ausgabe auf Bildschirm*/
        printf ("\nVerbrauch in l/100km= %f\n", fb_tabelle[i].verbrauch);
        printf ("Euro pro Liter =%f\n\n", fb_tabelle[i].eur_pro_liter);

        /* Ausgabe auf File*/
    
        //    outfile_ptr = fopen("outfile.xls","a+");

    } // endfor_i
    return (0);

} // endmain
    int eingabefunktion_scan_int (int anzahl_wiederholer, int * einlese_var_int_ptr)
    {
        int scan_zahl =0;
        for ( int i =0; i <= (anzahl_wiederholer-1); i++ )
        {    
            printf ("Geben Sie einen ganzzahligen Werte ein! \n");
            
            scan_zahl =scanf ("%i", einlese_var_int_ptr);
            printf ("scan_zahl =%i\n", scan_zahl);
            
            if (scan_zahl ==0)
            {
                printf ("Fehler aufgetreten, bitte Neueingabe!");
                
                fflush (stdin);
            } // endif
            
            if (scan_zahl >0 )
                return (scan_zahl);            
                
        }
        return (scan_zahl);
    
    } // endfunction

    int eingabefunktion_scan_float (int anzahl_wiederholer, float * einlese_var_int_ptr)
    {
        int scan_zahl =0;
        for ( int i =0; i <= (anzahl_wiederholer-1); i++ )
        {    
            printf ("Geben Sie einen ganzzahligen Werte ein! \n");
            
            scan_zahl =scanf ("%f", einlese_var_int_ptr);
            printf ("scan_zahl =%i\n", scan_zahl);
            
            if (scan_zahl ==0)
            {
                printf ("Fehler aufgetreten, bitte Neueingabe!");
                
                fflush (stdin);
            }
            
            if (scan_zahl >0 )
                return (scan_zahl);            
                
        }
        return (scan_zahl);
    
    } // endfunction


Dieser Post wurde am 28.05.2018 um 15:51 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2018, 15:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

allgemein ist folgender Link evtl interessant:

http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-cpl

Prinzipiell gilt

Wenn du C und C++ mischen kannst, benutze C++ und kein C.

Auch ist obiger Code zwar C, aber selbst in C schlechter Stil (globale Variablen, ...)
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.05.2018 um 15:55 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2018, 22:55 Uhr
ao

(Operator)



Zitat von FloSoft:
Hi,
allgemein ist folgender Link evtl interessant:
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-cpl


Auch wenn das von den Herren Stroustrup und Sutter kommt: Mindestens zu der Regel CPL.2 "If you must use C, use the common subset of C and C++, and compile the C code as C++" gibts auch ne Gegenregel, nämlich "Schreib überhaupt keinen Code, der versucht, C und C++ gleichzeitig zu sein. Schreib konsequent entweder in C oder in C++, aber nicht in beidem. Und wenn dein Code nur mit einem der beiden Compiler übersetzt, dann sei es eben so."

Das schafft nämlich Klarheit und vermeidet so Sachen wie
int * p = (int*) malloc (100 * sizeof (int));

Erklärung: Das explizite Casten von malloc ist in C nicht nötig und böse, weil es Fehler verschleiern kann. In C++ soll man überhaupt kein malloc verwenden, da nimmt man new oder Smartpointer.

Dieser Post wurde am 29.05.2018 um 15:42 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.05.2018, 15:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ja da hast du vollkommen recht, Ich bin da deiner Meinung: Wenn C++ verfügbar, dann C++ und kein C.


Zitat von ao:

In C++ soll man überhaupt kein malloc verwenden, da nimmt man new oder Smartpointer.


Ich würde den Satz so formulieren:

In C++ soll man weder new noch malloc verwenden, da nimmt Smartpointer.
--
class God : public ChuckNorris { };

Dieser Post wurde am 29.05.2018 um 15:44 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.05.2018, 23:31 Uhr
m.sc.m



Veilen Dank für die guten und ausführliche Erklärungen!


Mir geht es darum, ob mein Eindruck von dem gezeigten Code stimmte.


Der aufgezeigten Code stammte von meinem Professor , der C++ den Studenten beibringt! (Und Software Engineering )

Auch bei anderen Professoren habe ich (als Hilfe für mathematische Probleme) eigentlicher C Code als C++ Code deklariert in ihren Ordner gefunden.

Danke und bis zum nächsten Mal.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.05.2018, 10:03 Uhr
ao

(Operator)



Zitat:
Mir geht es darum, ob mein Eindruck von dem gezeigten Code stimmte.

Was ist denn dein Eindruck?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: