Problem mit dem befehl strct{};



  • miller_m schrieb:

    main sollte mal so aussehen

    int main(int argc, char *argv[])
    

    hat aber nix mit dem problem zu tun. es fehlt der adressoperator bei allen scanf's

    scanf( "%ld", &p.nr );
    

    wieder einmal, jedesmal passiert mir das

    danke

    jetzt funzt es 🙂

    #include<stdio.h>
    #include<conio.h>
    
    #define ANZ 2
    
    struct Platte
    {
      long nr;
      int anzahl;
      char titel[30];
      float preis;
    };
    
    int einlesen( Platte *p);
    void ausgeben( Platte *p);
    
    void main()
    {
    
      Platte p[ANZ];
      int i;
    
      for ( i = 0; i < ANZ; i++ )
        einlesen( &p[i]);
      for ( i = 0; i < ANZ; i++ )
        ausgeben( &p[i] );
      getch();
    
    }
    
    int einlesen( Platte *p)
    {
    
      printf( "\nBitte geben Sie die Artikelnummer der Platte ein:" );
      fflush( stdin );
      scanf( "%l", &p->nr );
      printf( "\nBitte geben Sie die Stück ein:" );
      fflush( stdin );
      scanf( "%d", &p->anzahl );
      printf( "\nBitte geben Sie den Titel der Platte ein:" );
      fflush( stdin );
      scanf( "%s", &p->titel );
      printf( "\nBitte geben Sie den Preis der Platte ein:" );
      fflush( stdin );
      scanf( "%f", &p->preis );
      return 0;
    }
    
    void ausgeben( Platte *p)
    {
    
      printf( "\nArtikelnummer: %2l", p->nr );
      printf( "\nAnzahl:        %2d", p->anzahl );
      printf( "\nTitel:         %s ", p->titel );
      printf( "\nPreis:         %2.2f", p->preis );
    
    }
    


  • Hirogen(CD) schrieb:

    jetzt funzt es 🙂

    scanf( "%s", &p->titel );
    

    Ganz sicher? 😉



  • miller_m schrieb:

    main sollte mal so aussehen

    int main(int argc, char *argv[])
    

    warum sollte main eigentlich so aussehen ??



  • MFK schrieb:

    Hirogen(CD) schrieb:

    jetzt funzt es 🙂

    scanf( "%s", &p->titel );
    

    Ganz sicher? 😉

    ja warum??

    ist ja nix falsches?? Ich kann zwar auch Zahlen einlesen, aber ich wollte nur mal die Eingabe hinbekommen.



  • Hirogen(CD) schrieb:

    miller_m schrieb:

    main sollte mal so aussehen

    int main(int argc, char *argv[])
    

    warum sollte main eigentlich so aussehen ??

    siehe http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ

    int einlesen( Platte &p)
    {
      printf( "\nBitte geben Sie die Artikelnummer der Platte ein:" );
      fflush( stdin );
      scanf( "%l", &p.nr );
      printf( "\nBitte geben Sie die Stück ein:" );
      fflush( stdin );
      scanf( "%d", &p.anzahl );
      printf( "\nBitte geben Sie den Titel der Platte ein:" );
      fflush( stdin );
      scanf( "%s", &p.titel );
      printf( "\nBitte geben Sie den Preis der Platte ein:" );
      fflush( stdin );
      scanf( "%f", &p.preis );
      return 0;
    }
    
    void ausgeben( Platte &p)
    {
    
      printf( "\nArtikelnummer: %2l", p.nr );
      printf( "\nAnzahl:        %2d", p.anzahl );
      printf( "\nTitel:         %s ", p.titel );
      printf( "\nPreis:         %2.2f", p.preis );
    
    }
    

    so würde ich es machen 😉





  • CarstenJ schrieb:

    Hallo,

    Zu fflush(stdin):
    http://www.c-plusplus.net/forum/viewtopic.php?t=39349&highlight=fflush+undefiniert

    Aha, na das ist mir neu, ich habe in der schule gelernt, das fflush(stdin) bei einer eingabe, die adresswerte einer variable löscht, damit kein wires Zeug in dieser steht wenn man eine Variable einließt.

    Ich hab aber jetzt ein anderes problem 🙂

    das mit dem "&" war ein schlampigkeits fehler.

    Jedoch hab ich jetzt kurzerhand eine einfache Sicherheitsabfrage gemacht damit, bei Artikelnummer, Preis, und Anzahl keine Buchstaben eingelesen werden. Diese Sicherheitsabfrage funktioniert aber nur bei der Artikelnummer und ich weiß aber nicht warum ??? Beim Titel habe ich das deshalb nicht gemacht, weil es ja Titel gibt die Alphanumerische sind.

    hier der code

    void einlesen( Platte &p )
    {
      int rw;
      printf( "\nBitte geben Sie die Artikelnummer der Platte ein:" );
      fflush( stdin );
      rw = scanf( "%ld", & p.nr );
      /*rw kann nur 1 oder 0 sein, da der rückgabewert von scanf nur 1 oder 0 sein
      kann, wenn keine Zahl eingegeben wird ist es 0 bei einer Zahl ist es 1*/
      while ( rw != 1 )
      {
        printf( "Achtung Sie haben keinen Numerischen Wert eingegeben!\n" );
        printf( "Bitte geben Sie die Artikelnummer der Platte nochmals ein:\n" );
        fflush( stdin );
        rw = scanf( "%ld", & p.nr );
      } // ende while
    
      printf( "\nBitte geben Sie die Anzahl der Platten ein:" );
      fflush( stdin );
      scanf( "%d", & p.anzahl );
      while ( rw != 1 )
      {
        printf( "Achtung Sie haben keinen Numerischen Wert eingegeben!\n" );
        printf( "Bitte geben Sie die Anzahl der Platten nochmals ein:\n" );
        fflush( stdin );
        rw = scanf( "%d", & p.anzahl );
      } // ende while
    
      printf( "\nBitte geben Sie den Titel der Platte ein:" );
      fflush( stdin );
      scanf( "%s", & p.titel );
    
      printf( "\nBitte geben Sie den Preis der Platte ein:" );
      fflush( stdin );
      scanf( "%f", & p.preis );
      while ( rw != 1 )
      {
        printf( "Achtung Sie haben keinen Numerischen Wert eingegeben!\n" );
        printf( "Bitte geben Sie den Preis der Platte nochmals ein:\n" );
        fflush( stdin );
        rw = scanf( "%f", & p.preis );
      } // ende while
    }
    


  • Hirogen(CD) schrieb:

    @basher 🤡 da is ja einer witzig 🤡

    typedef deshalb nicht weil es die c++ schreibeweise einer struktur ist, der rest ist jedoch c 😉 gell basher

    Ein C++-Programm wird nicht automatisch C, nur weil man printf benutzt. Fakt ist, dass kein C-Compiler der Welt dir dieses Programm übersetzt. Weil C zum Beispiel keine Referenzen kennt. Hättest du im richtigen Forum gepostet, wär dir z.B. dieser unsinnige Ratschlag (sorry Johnny X, im lokalen Kontext hast du natürlich Recht, aber global gesehen bringt der ihm nichts), die Referenz durch einen Pointer zu ersetzen, erspart geblieben.

    BTW hast du meinen Namen falsch geschrieben.



  • ok der fehler hat sich erledigt, dumm wenn man das rw = vor dem scanf vergisst 😞



  • Fakt ist, dass kein C-Compiler der Welt
    dir dieses Programm übersetzt.

    falsch. Richtig wäre, kein "nur Standardcompiler".

    Der lccwin32 zb. kennt Referenzen als superduper only lccwin32 goodie unter den C Compilern. 🙂

    tschöö

    tt



  • Bashar schrieb:

    Hirogen(CD) schrieb:

    @basher 🤡 da is ja einer witzig 🤡

    typedef deshalb nicht weil es die c++ schreibeweise einer struktur ist, der rest ist jedoch c 😉 gell basher

    Ein C++-Programm wird nicht automatisch C, nur weil man printf benutzt. Fakt ist, dass kein C-Compiler der Welt dir dieses Programm übersetzt. Weil C zum Beispiel keine Referenzen kennt. Hättest du im richtigen Forum gepostet, wär dir z.B. dieser unsinnige Ratschlag (sorry Johnny X, im lokalen Kontext hast du natürlich Recht, aber global gesehen bringt der ihm nichts), die Referenz durch einen Pointer zu ersetzen, erspart geblieben.

    BTW hast du meinen Namen falsch geschrieben.

    sorry wegen dem Namen 😞

    Ich weiß schon das mir das kein C-Compiler übersetzen wird, weil die Struktur in C++ schreibweise geschrieben ist, und dieser dadurch gleich mal einen Aufschrei macht, jedoch hab ich daran nicht gedacht, als ich hier den Post gemacht habe, der rest bleibt aber trotzdem C schreibweise ;), auch wenn es in eigentlich Form (und da hast du Recht) ein C++ Programm ist.



  • weil die Struktur in C++ schreibweise geschrieben

    nein er meinte das glaube ich wegen dem & in der Funktionsparameterliste...

    Und das das C++ Schreibweise wäre ist nich richtig :).

    bye

    tt



  • TheTester schrieb:

    weil die Struktur in C++ schreibweise geschrieben

    nein er meinte das glaube ich wegen dem & in der Funktionsparameterliste...

    Und das das C++ Schreibweise wäre ist nich richtig :).

    bye

    tt

    warum nicht?

    das würde ich gern, wissen, weil uns unsere prof das so erklärt hat und wenn die nen stuß daherredet würde ich das gerne, wissen, also warum ist das nicht die c++ schreibweise???? 😕



  • Weil es typedef auch in C gibt??



  • AJ schrieb:

    Weil es typedef auch in C gibt??

    in c++ kann man das typdef jedoch weglassen, der compiler erkennt es automatisch



  • Soviel ich weiß, ist das in C nicht anders. Allerdings sollte man zur Sicherheit trotzdem das struct vor dem Strukturnamen angeben. Und wenn man es gleich richtig macht, dann macht man das sowieso mit typedef.



  • AJ schrieb:

    Soviel ich weiß, ist das in C nicht anders. Allerdings sollte man zur Sicherheit trotzdem das struct vor dem Strukturnamen angeben. Und wenn man es gleich richtig macht, dann macht man das sowieso mit typedef.

    dann eine andere frage was bewirkt das typedef genau.



  • tja keine Ahnung was ich dir jetzt erzählen soll. Wenn wir "struct" auf das reduzieren was es in C darstellt eine "Zusammenfassung von beliebigen Datentypen". Und es auch so behandeln. Dann gibts keine Unterschiede. Dann ist folgendes in C sowie in C++ identisch.

    struct Platte
    {
      long nr;
      int anzahl;
      char titel[30];
      float preis;
    };
    

    Wenn ich jetzt eine C++ struct als C++ struct getrennt von einer C struct behandle sind beide nicht das Selbe.
    Das kommt daher weil die C++ struct eine "Art" von einer Klasse ist. Und Klassen haben wir ja in C nicht. Das trifft dann auch auf die Syntaktische Spezifikation zu. Wenn ich alles mit beachte was mir C++ bietet dann hat eine C++ struct mit einer C struct nur das gemeinsam was mir auch eine C struct erlaubt. Also das heisst C++ struct != C struct bis auf eine kleine "Untermenge" wenn ich alle Möglichkeiten ausser Acht lasse die mir C++ zusätzlich bietet.
    Also es is wirklich blöd zu beschreiben 😉

    bye

    tt



  • Hallo,

    vielleicht hilft das noch irgendwie weiter:
    http://www.c-plusplus.net/forum/viewtopic.php?t=71271&highlight=typedef+struct



  • habt ihr vielleicht ein paar konkrete beispiele dafür

    wo man den unterschied sehen kann vielleicht mit einem kleinen programm.


Anmelden zum Antworten