ZeichenundWortzaehlprogramm-Anwendungsweise



  • Hallo liebe Freunde der Programmiersprachen,
    Ich habe hier ein Programm welches aus dem Standardwerk kerningham&ritchie
    entnommen ist

    #include<stdio.h>
    #include<stdlib.h>
    
    //#define IN 1   zum besseren Verständnis  --IN OUT-- in einem Wort
    //#define OUT 0  ausserhalb eines Wortes
    
    main(){
    int c,nl,nw,nc,state;
    state=0;
    nl=nw=nc=0;
    while((c=getchar())!=EOF)
    {
    ++nc;
    if (c=='\n')
       ++nl;
    if (c== ' ' || c == '\n' || c == '\t')
    state=0;
    else if (state == 0)
    {
        state=1;
        ++nw;
    }
    }
    printf("%d  %d  %d \n",nl,nw,nc);
    //system("pause");
    }
    

    es ist in der Lage Woerter Zeichen und Zeilenumbrüche zu zaehlen !
    Ich bin in C Anfaenger aber kann Quelltext schon ganz gut lesen und
    verstehen ... es ist mir nach einigen Minuten ohne weiteres gelungen
    die Logik und arbeitsweise zu verstehen.
    Das Problem ist das Programm dazu zu bekommen einen Text zu
    bearbeiten die Variable EOF soll scheinbar das Ende eines Textes
    siganlisieren.
    Die hier von mir nur leicht veränderte Version (OUT = 0 In =1 - habe die
    Originalwerte 0 und 1 im Programm verarbeitet) läuft fehlerfrei, zählt aber
    nichts ...
    Meine Frage : Was muss hier getan werden damit das Programm einen Text
    zaehlt? und ausgibt ?


  • Mod

    Ich verstehe nicht, was deine Frage ist. Der Quelltext tut genau, was angepriesen wird. Er zählt Zeilen, Wörter und Buchstaben, gibt anschließend das Ergebnis aus.

    Die hier von mir nur leicht veränderte Version (OUT = 0 In =1 - habe die
    Originalwerte 0 und 1 im Programm verarbeitet) läuft fehlerfrei, zählt aber
    nichts ...

    Wovon redest du? Du hast ein paar auskommentierte defines im Programm, aber selbst wenn du sie aktivierst, ändern diese nichts im Programm.

    Meine Frage : Was muss hier getan werden damit das Programm einen Text
    zaehlt?

    Nichts!

    und ausgibt ?

    Gib eben die gelesenen Zeichen direkt nochmal aus.

    https://ideone.com/yFOZqW



  • Ich meine wie Ich das Programm einsetze !
    d.h. es soll doch einen Text durarbeiten und anschliesend das Ergebnis
    ausgeben

    printf("%d  %d  %d \n",nl,nw,nc);
    //system("pause");
    }
    

    das passiert nicht ?
    das Terminal geht in einen Text-Einlesemodus, und wenn Ich mit
    STRG+C einen Abbruch erzeuge erfolgt keine Ausgabe.
    Entweder muss man das Programm auf ein File richten, - dies würde
    eine Erweiterung des Quelltextes erfordern oder es muss
    eine spezielle Eingabe getätigt werden die EOF entspricht, so dass
    gemäß dem Quelltext der Schleifenabbruch erfolgt und die anschliessende
    Ausgabe .... ---- Probier das Programm bitte mal selber aus ... dann
    verstehst du was Ich meine.
    Ohne Eine Ausgabe bzw. Einlesen eines bestimmten Textes ist das Programm
    doch sinnlos?



  • Ich bekomme im Terminal keine Ausgabe ?
    Das ist mein Problem



  • Arbeitest du unter Windows? Dann mußt du in der Konsole "Strg+Z" als EOF eingeben.
    "Strg+C" bricht dein ganzes Programm ab (wie du ja selbst schon erfahren hast ;-).

    P.S: Du kannst auch in der Konsole aus einer Datei lesen, einfach die Eingabe mittels '<' umleiten:

    program.exe <input.txt
    

    Edit: immer diese Buchstabendreher...


  • Mod

    Unter Linuxartigen Systemen wäre das übrigens CTRL+D.



  • Arbeite mit Windows Dev++ und auch ubuntu gedit + Terminal ...
    mit Strg+D hat es jetzt unter ubuntu einwandfrei funktioniert
    Danke für eure Beiträge !!!


Anmelden zum Antworten