Wieso geht dieser einfache Quellcode nicht?

  • geschlossen
  • C

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wieso geht dieser einfache Quellcode nicht?

    Dieser Quellcode soll in kompilierter Form die Eingabezeichen, die man in der Konsole eingibt, zählen und, sobald Enter gedrückt wird, die Anzahl der eingegebenen Zeichen ausgeben.
    Leider funktioniert er nicht. Ich benutze gcc 3.3.5 zum Kompilieren. Doch nach dem Aufruf tut sich nichts, d.h. das Programm beendet sich nicht einmal. Der einzige Weg, rauszukommen, ist Strg-C zu drücken... und dabei sollte es doch nach Druck der Eingabetaste die Anzahl eingegebener Zeichen anzeigen und dann sich beenden. Doch nichts funktioniert.

    Hier der Code:

    Quellcode

    1. #include <stdio.h>
    2. main()
    3. {
    4. long zeichen;
    5. zeichen = 0;
    6. while(getchar() != EOF)
    7. ++zeichen;
    8. printf("%ld\n", zeichen);
    9. }


    Woran könnte es liegen?
    Vielen Dank im Voraus für Tipps und Hilfe,
    made07
  • Hi ,

    Also ich glaube du hast wohl beim lernen nicht richtig gelesen also erstma was falsch ist

    1.

    PHP-Quellcode

    1. main()
    ?? Ich glaube das soll

    PHP-Quellcode

    1. int main()
    heißen .

    2.

    PHP-Quellcode

    1. while(getchar() != EOF)
    ?? Eine While Schleife mit einer Bedingung aber ohne Befehle .

    3. Am Ende muss ein Wert zurückgeliefert werden da wie bei dir das Programm sich einfach aufhängen würde .

    SRY nen richtigen Code kann ich dir jetzt net liefern bin zu müde , aber müsstest du auch selber hinbekommen .

    MfG [email protected]
    [SIZE=1]"Liegt der Camper tot im Keller war der Rusher wieder schneller , liegt der Rusher noch daneben hats nen zweiten noch gegeben ."
    Geupptes :
    System Shock 2 | 1 GB Mixxed Stuff | 3 GB Mixxed Stuff | Kingdom Hearts | PSP MiXx0r | DOD:Source + Hentai | Resident Evil 4 PAL | SiN Episodes 1 : Emergence
    Aktuelle Ups : - Insgesamt : 0,00GB
    [/SIZE]
    [SIZE=1]Bevorzugte : Ich,Pumkinfreak,Mogli,deluxemaster,Mut4t0r[/SIZE] [SIZE=1]
    Blacklist : oli3010,paddys2005,Black_Devil,will alle games,Judoman,RaSanz,oanfie[/SIZE]
  • Tja, das Problem ist immer noch da, aber ich habe jetzt durch eine viertel Stunde googlen was wichtiges gefunden:
    Das EOF wird nicht durch die Eingabetaste generiert, sondern durch eine Tastenkombination, unter Windows Strg-Z und unter Linux Strg-D (aber erst einmal Eingabe drücken vorher!) Die Eingabetaste wird zwar dann als Zeichen mitgezählt, aber es funktioniert!!

    Danke für die Tipps, übrigens ist der Befehl von der while-Schleife das ++zeichen, ich werde in Zukunft Klammern darum machen, obwohl es so auch zu funktionieren scheint.

    Vielen Dank,
    made07
  • Frager132 schrieb:

    Hi ,

    Also ich glaube du hast wohl beim lernen nicht richtig gelesen also erstma was falsch ist

    1.

    PHP-Quellcode

    1. main()
    ?? Ich glaube das soll

    PHP-Quellcode

    1. int main()
    heißen .

    2.

    PHP-Quellcode

    1. while(getchar() != EOF)
    ?? Eine While Schleife mit einer Bedingung aber ohne Befehle .

    3. Am Ende muss ein Wert zurückgeliefert werden da wie bei dir das Programm sich einfach aufhängen würde .

    SRY nen richtigen Code kann ich dir jetzt net liefern bin zu müde , aber müsstest du auch selber hinbekommen .

    MfG [email protected]

    Es wird durchaus von vielen compilern auch eine "typfreie" main-funktion unterstüzt, diese liefert dann einfach "void" zurrück (ich glaube dies ist sogar ANSI konform).
    Und die while-Schleife führt die inkrementierung der Variable Zeichen durch, auch dies ist gängige, ANSI konforme, Syntax.
    Syntaktisch ist also alles korrekt, ich würde in der entsprechenden Doku mal nachlesen was genau getchar für einen Rückgabewert hat (bzw. ob überhaupt irgendwann einmal ein EOF zu erwarten ist).
  • Also, von der Syntax her ist alles ok.
    Wenn nur eine Anweisung im Anweisungsblock erfolgt, kann man die Klammern weglassen.
    getchar() liefert einen Integerwert zurueck.
    EOF steht fuer End of File - etwas fraglich in diesem Zusammenhang!
    du willst die Enter-Taste abfragen - nun, leider liefern Sondertasten (F1 bis F12, ENTF, ENDE, POS1 usw.) immer 2 Byte, wobei als erstes ASCII-0 geliefert wird.

    Versuchs mal hiermit:

    #include <stdio.h>
    #define ESC 27

    int main()
    {
    long zeichen;
    int x;
    zeichen = 0;
    while((x=getchar()) != ESC)
    ++zeichen;
    printf("%ld\n", zeichen);
    return 0;
    }


    Na ja, sauber ist das alles nicht, du kannst jetzt wahrscheinlich erst nach druecken der ESC-Taste und dann nach druecken der Entertaste dein Programm beenden.

    Ich werde mir die Geschichte nochmals anschauen. ;)
  • oder so...

    C-Quellcode

    1. #include <stdio.h>
    2. #include <string.h>
    3. void main (void)
    4. {
    5. int x;
    6. char test[100];
    7. gets(test);
    8. x=strlen(test);
    9. printf("%i",x);
    10. }
    Alles anzeigen


    damit sind logischerweise "nur" 101 zeichen möglich, aber das solte ja reichen...
    [SIZE=1]
    Was ist der Unterschied zwischen einem U-Boot und MS Windows?
    Keiner, sobald man ein Fenster aufmacht, fangen die Probleme an
    Alle Tips von mir ohne Gewähr und auf eigenes Risiko !!
    UP1 UP2 UP3[/SIZE][SIZE=1]
    [/SIZE]
  • So ist es wohl etwas sauberer (wenn auch mit Typumwandlung) und funktioniert auch:

    Quellcode

    1. #include <stdio.h>
    2. int main()
    3. {
    4. long zeichen=0;
    5. unsigned char x;
    6. while((x=getchar()) != 0xA)
    7. ++zeichen;
    8. printf("%ld\n",zeichen);
    9. return 0;
    10. }
    Alles anzeigen


    Jetzt kann solange auf der Tastatur rumgehaemmert werden, bis ENTER gedrueckt wird.
  • Cool danke an euch alle für eure Bemühungen!!
    Also liegt es sozusagen nur daran, dass durch die Enter-Taste kein EOF erzeugt wird...
    Danke für eure vielen Beispiele!
    Jetzt ist alles klar.