Character Array auf Inhalt überprüfen



  • Hallo zusammen

    Als noch unerfahrener Programmierer in C++ stehe ich vor einem kleinen problem.
    Ich habe einen Character- Array (256 zeichen), in dem der User (mittels gets()) einen beliebigen text eingeben kann. 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?

    Hier der relevante teil, der die Eingabe verlangt und in den Array speichert:

    void textEingabe()
    {
       char caTextEingabe[256];
       ...
    
       printf("Bitte Text eingeben: ");
       gets (caTextEingabe);
       ...
    }
    

    Besten Dak im Voraus
    ffarkas



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Lass dir doch mal den ersten char im Array numerisch ausgeben und sieh dir an was kommt, wenn der Benutzer nur Enter drueckt. Vielleicht faellt dir dann selbst eine Loesung ein.



  • Hallo ffarkas,

    Willkommen im C++-Forum.

    Nur zur Info: Du bezeichnest Dich als C++-Programmierer; printf und gets sind aber C.
    In C++ würde das in etwa so aussehen:

    #include <iostream> // cin, cout
    #include <string> // std::string, getline
    
    int main()
    {
        using namespace std;
        string beliebiger_text;
        if( getline( cin, beliebiger_text ) )
        {
            cout << "Der Benutzer hat '" << beliebiger_text << "' eingegeben" << endl; 
        }
        return 0;
    }
    

    Aber Achtung: so liest Du immer eine Zeile nur als Text. Möchtest Du z.B. andere Typen, wie z.B. Zahlen lesen, so solltest Du Extraktoren benutzen.

    Gruß
    Werner


  • 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