Modifiziertes Zählprogramm
-
#include <stdio.h> int main() { int c6, nl2 = 0, nl3 = 0; while ((c6 = getchar()) != 'q') { if (c6 == ' ') { nl2++; nl2 = ' '; c6 = c6 - nl2 ; //nl2 = nl2 + nl3; } putchar (c6 ); } return 0; }
Hi, ich hab das programm schon soweit dass alle Leerzeichen gelöscht habe. Nun möchte ich dass, wo viele Leerzeichen gibt nur eine bleibt. Und dann nach ENTER es ausgegeben wird. Ich hab schon viel ausprobiert, jetzt bin ich hoffnungslos deshalb bitte ich euch um hilfe.
Vielen dank im voraus
-
sowas?
#include <stdio.h> int main() { int c6, nl2 = 0; while ((c6 = getchar()) != 'q') { if (c6 == ' ') nl2++; else nl2 = 0; if (nl2 < 2) putchar (c6); } return 0; }
-
schaut gut aus, kannst du es mal kurz erklären, weil ich das nicht richtig verstehe.
vielen dank
-
nl2 zählt die spaces und wird jedsamal auf 0 gesetzt, wenn kein space kam. danach wird überprüft ob weniger als 2 spaces da sind. ist das der fall, dann wird das zeichen ausgegeben.
-
das mein ich ja, du hast nicht gesagt wenn mehr als 1 leerzeichen ist, wird dann die leerzeichen subrahiert und ein leerzeichen gelassen. Sonsdern andersrum deshalb habe ich das nicht verstanden wie es funktionieren kann. Ist das dann automatisch von putchar oder wo wird das gerechnet?
Ich versteh das immer noch nicht.
-
getchar() blockiert bis die enter-taste gedrückt wird. dann holt es (in dieser while-schleife) alles aus dem tastaturbuffer bis ein 0x0a (oder 0x0d ??) kommt. die spaces werden dann mit nl2 gezählt, jedes nicht-space setzt den zähler zurück. weniger als 2 spaces hintereinander (zähler nl2) geben das zeichen mit putchar() aus. andernfalls wird das zeichen (es muss ja dann ein space sein) verworfen (also es wird nichts ausgegeben). jetzt klar?
-
andernfalls wird das zeichen (es muss ja dann ein space sein) verworfen (also es wird nichts ausgegeben).
und wie kommt das dazu dass es verworfen wird?
-
maximo schrieb:
andernfalls wird das zeichen (es muss ja dann ein space sein) verworfen (also es wird nichts ausgegeben).
und wie kommt das dazu dass es verworfen wird?
der inhalt von c6 wird beim nächsten schleifendurchlauf überschrieben