'C'-Beginners Problem 'Zeichen_zählen'

Hallo liebe C-Freaks!
Wir sind eine illustre Gruppe an Leuten, die sich zum Ziel gesetzt haben, die schöne Sprache C zu erobern. Doch gleich zu Beginn kommen wir ins Stocken, denn folgendes Programm tut bei uns nicht das, was es soll, nämlich „Zeichen zählen“.
Es stammt aus „Ritchie&Kernighan“`s C-Bibel und wir arbeiten mit Suse 6.4 .

Der Code ließ sich sauber compilieren, doch bei der Ausführung wird halt nix gezählt. Woran mag das liegen?

1000 THX und Gruesse daskl@us

Programm:

/* Eingabezeichen zaehlen, Ver 1 */
#include
main ( )
{
long nc;
nc = 0;
while (getchar( ) !=EOF)
++nc;
printf("%1d\n", nc);
}

Der Code ließ sich sauber compilieren, doch bei der Ausführung
wird halt nix gezählt. Woran mag das liegen?

Dumme Frage, aber gibst du auch was ein?

getchar() holt Zeichen aus stdin, also normal von der Tastatur.

Grüße, Robert

ich würde sagen in der while - schleife fehlen die klammern:

while (getchar( ) !=EOF)
{
++nc;
printf("%1d\n", nc);
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

probierts mal so:
#include

main ( )
{
char eing;
long nc;
nc = 0;

while (eing != ‚e‘)
{
eing=getchar();

++nc;
printf("%1d\n", nc);
}

}

Ich denke auch es wird an den Klammern liegen,
so wird die while-Schleife zwar zählen aber nichts ausdrucken, bzw. erst nach EOF genau einmal. Die while-Schleife mit fehldendem Block (Klammern) wird vermutlich wie if und so auch nach dem ersten statement aufhören, aber ich habs noch nie getestet, am besten grundsätzlich in { } einbauen auch wenn nur ein einzelner Ausdruck

Bruno

Moin,

Der Code ließ sich sauber compilieren, doch bei der Ausführung
wird halt nix gezählt. Woran mag das liegen?

Das kann ich nicht sagen, wenn ich die Eingaben nicht kenne. Es liegt definitiv nicht an den Klammern: ‚while‘ verlangt einen Ausdruck, ein Block ist ein Ausdruck, eine einfache Anweisung ebenso. (Trotzdem sollte man immer Klammern setzen.)
Der Code sieht bis auf kosmetische Dinge OK aus.

Thorsten

Du musst auch EOF eingeben!!!
Hi :wink:))

Der Code ist völlig korrekt. Das Problem ist, dass das Zeilenzähl-Progrämmchen erst stoppt und sein Ergebnis preisgibt, nachdem die EOF-Marke generiert wurde. Euer Problem ist eigentlich genau diese EOF-Marke. Sie wird erzeugt, indem man in einer neuen Zeile + und dann drückt. Mit dieser „magischen“ Tastenkombination, wird das Programm funktionieren.

Nur weiter so …

cu Stefan.

Nachtrag, und doch ein Bug …
Hi, ich bin’s nochmal :wink:))

Wenn du die EOF-Hürde genommen hast, wird die Ausgabe immer noch nicht deinen Erwartungen entsprechen, weil es in der printf()-Anweisung nicht „%1d“, sondern „%ld“ heißen muss (long dezimal). Oder hätte ich das jetzt noch nicht verraten sollen?

Sorry, aber beim Antworten hatte ich dein Posting eingebunden und der Zeichensatz ist dann etwas unglücklich, weil eine Eins „1“ genau so aussieht wie ein kleines L („l“). Daher hatte ich den Fehler nicht sofort bemerkt …

cu Stefan.

irrtum
Hab es nicht genau gelesen, die while-Schleife soll ja auch gar nicth jedesmal printen.

sorry

Bruno

Ich habe noch eine kleine Bemerkung am Rande.

Der Ausdruck ‚++nc‘ ist C+±Syntax und gehört nicht zu C. Solange ihr einen C+±Compiler verwendet gibt es keine Probleme, ansonsten müßtet Ihr ‚nc=nc+1‘.

Gruß

Thomas

Unsinn!
Hi Thomas :wink:))

Ich habe noch eine kleine Bemerkung am Rande.

Die hättest du besser für dich behalten :wink:))

Der Ausdruck ‚++nc‘ ist C+±Syntax und gehört nicht zu C.

Falsch!!! Natürlich gehört ‚++‘ als Pre-Increment-Operator zur Sprache C. „++nc“ funktioniert auch mit einem reinen C-Compiler!!!

Was in C nicht geht, ist „++++nc“. DAS geht nur in C++ !!!

cu Stefan.