Character Array auf Inhalt überprüfen


  • Mod

    ffarkas schrieb:

    Als noch unerfahrener Programmierer in C++ stehe ich vor einem kleinen problem.

    Ein kleines Problem ist, dass du C programmierst, nicht C++. Man sollte schon wissen, welche Sprache man gerade lernt, C und C++ sind ungefähr so ähnlich wie C und Java.

    (mittels gets())

    Typische Compilerwarnung:

    GCC schrieb:

    The gets() function is dangerous and should not be used.

    Und das ist auch richtig so. Wenn der Nutzer mehr als 255 Zeichen eingibt, dann kann er wer weiß was mit deinem Computer anstellen. Guck dir mal fgets an.

    Wie kann ich das am einfachsten lösen? Gibt es vielleicht sogar eine fertige Funktion für sowas?

    Ja, jede Menge sogar:
    http://www.cplusplus.com/reference/clibrary/cstring/
    Da findest du, was du brauchst. Es ist sogar wichtig, dass du diese Funktionen (oder selbst geschriebene Äquivalente) benutzt, weil bei der Zeichenkettenrepräsentation in C die Verwendung von == und ähnlichen Operatoren etwas ganz anderes macht als man als Anfänger zunächst vermuten könnte.



  • SeppJ schrieb:

    Ein kleines Problem ist, dass du C programmierst, nicht C++. Man sollte schon wissen, welche Sprache man gerade lernt, C und C++ sind ungefähr so ähnlich wie C und Java.

    Ich dachte das wäre eine Community. Schicker Tritt vor den Bug und vollkommen unnötig.

    C++ ist eine Obermenge von C und die meisten C- Programme lassen sich prima mit einem C++ Compiler compilieren.

    Uns es ist absolut legitim, mit der C-Programmierung zu beginnen, um sich dann der C++ Erweiterungen zu widmen.

    Ciao
    MM



  • ffarkas schrieb:

    Nun möchte ich überprüfen, ob er überhaupt etwas eingetippt hat oder einfach nur die Eingabetaste gedrückt hat. Wie kann ich das am einfachsten lösen? Gibt es vielleicht sogar eine fertige Funktion für sowas?

    Du kannst mit strlen die Länge Deines Strings ermitteln. Ein leerer String hat die Länge 0.

    Nicht der effizienteste Weg, aber ein möglicher...

    Ciao
    MM



  • Martiniclan schrieb:

    Ich dachte das wäre eine Community. Schicker Tritt vor den Bug und vollkommen unnötig.

    Nur für die, die es unbedingt als Tritt vor den Bug auffassen wollen. Gemeint ist es wohl eher als "wenn du wirklich C++ programmieren willst, ist das der völlig falsche Ansatz"

    C++ ist eine Obermenge von C und die meisten C- Programme lassen sich prima mit einem C++ Compiler compilieren.

    Uns es ist absolut legitim, mit der C-Programmierung zu beginnen, um sich dann der C++ Erweiterungen zu widmen.

    Rein syntaktisch mag das mit der Kompatibilität stimmen. Allerdings bietet C++ eben völlig andere Möglichkeiten als C, ist damit eine völlig andere Sprache und sollte entsprechend auch mit einem anderen Stil geschrieben werden. C++ ist nicht eine bloße Erweiterung, auch wenn es aus C hervorgegangen ist. C++ ist wirklich eine eigene Sprache. Es ist zwar legitim, mit C zu beginnen (mit irgendeine Sprache muss man ja anfangen), allerdings ist es nicht legitim, seine Techniken, den Stil und die Bentuzung der Bibliotheken eins zu eins von C zu übernehmen. Den Fehler, "C mit Klassen" zu programmieren, haben in der Anfangszeit von C++ viele gemacht, bevor sich das Verständnis der Sprache und der Umgang damit weiter entwickelt hat. Das ist allerdings schon 20-25 Jahre her...


  • Mod

    Martiniclan schrieb:

    C++ ist eine Obermenge von C und die meisten C- Programme lassen sich prima mit einem C++ Compiler compilieren.

    Falsch.

    int main()
    {
     char *c = malloc(1);
    }
    

    Ein simpelstes C-Programm, schmeißt dir in C++ gleich haufenweise Fehler.

    Uns es ist absolut legitim, mit der C-Programmierung zu beginnen, um sich dann der C++ Erweiterungen zu widmen.

    Legitim im Sinne, dass ich dich nicht verklagen kann, aber eine gute Idee ist es ganz sicher nicht.



  • SeppJ schrieb:

    int main()
    {
     char *c = malloc(1);
    }
    

    Ein simpelstes C-Programm, schmeißt dir in C++ gleich haufenweise Fehler.

    int main()
    {
     char *c = malloc(1);
     return 0;
    }
    

    🙂



  • TyRoXx schrieb:

    int main()
    {
     char *c = malloc(1);
     return 0;
    }
    

    🙂

    error: invalid conversion from ‘void*’ to ‘char*’
    

    => immernoch nicht kompatibel...



  • pumuckl schrieb:

    TyRoXx schrieb:

    int main()
    {
     char *c = malloc(1);
     return 0;
    }
    

    🙂

    error: invalid conversion from ‘void*’ to ‘char*’
    

    => immernoch nicht kompatibel...

    Darum geht es gar nicht..
    Das sollte nicht C++, sondern besseres C werden.
    Abgesehen davon ist der erste Fehler in C++, dass malloc nicht gefunden wird.


  • Mod

    pumuckl schrieb:

    TyRoXx schrieb:

    int main()
    {
     char *c = malloc(1);
     return 0;
    }
    

    🙂

    error: invalid conversion from ‘void*’ to ‘char*’
    

    => immernoch nicht kompatibel...

    Tyroxx hat einen Fehler im C-Programm bereinigt, vorher war das nach C89-Standard falsch, da es in main kein implizites return 0 gibt. Aus Stilgründen müsste man noch int main(void) schreiben, damit auch ausgeschlossen ist, dass man irgendwelche anderen Argumente bekommt.

    Ich rede mich aber mal in beiden Fällen heraus, dass ich C99 gemacht habe.



  • Hallo zusammen

    also, zuerst einmal:

    @Werner Salomon
    Ja, Du hast recht. printf und gets sind natürlich c. Ich habe aber mit diesen Befehlen weit mehr möglichkeiten als mit cout bzw. cin. Somit bin ich damit ganz zufrieden.

    @SeppJ

    SeppJ schrieb:

    The gets() function is dangerous and should not be used.

    Ja, ich beokomme diese Meldung auch. Da diese Funktion aber, zumindest in meinen Augen, die einfachste Art ist, um alle Zeichen sauber einzulesen und ich bisher noch keinen passenden gleichwertigen Ersatz gefunden habe, bleibe ich dabei.

    Ich habe die Länge nun mittels strlen() ermittelt.
    http://cplusplus.com/reference/clibrary/cstring/strlen/.

    gruss
    ferenc



  • ffarkas schrieb:

    Ich habe aber mit diesen Befehlen weit mehr möglichkeiten als mit cout bzw. cin. [...]

    ... glaubst du.

    ffarkas schrieb:

    Da [...] ich bisher noch keinen passenden gleichwertigen Ersatz gefunden habe, bleibe ich dabei.

    fgets() mit stdin als input zum Bleistift.


Anmelden zum Antworten