Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

ich brauch mal wieder hilfe von euch! :mod:

ich möchte mein stdin mit der fgets funktion einlesen und erst wenn nichts eingegeben wird EOF machen bzw. halt auch wenn der buffer voll ist

char *fgets(&inputBuffer[0], 256, stdin)

char InputBuffer[256]

char *cptr

dann cptr = fgets(.....)

if (cptr == NULL)

hier dann das olle zählprogramm starten

haha toller witz!!!

in den tutorials steht es oft so in der art wie oben drinn, und du?? nen lösungsvorschlag hast du auch nicht, wohl auch keine tutorials gelesen

Tjo so in der Art ist aber nicht das Selbe...

und wie Klotzkopp schon sagt kann mit deiner Problembeschreibung niemand etwas anfangen. Du hast weder gezeigt was genau du gemacht hast noch was genau das Problem ist. Wenn du also Hilfe willst musst du dich entweder selbst mit C vertrut machen um den Fehler zu finden oder dein Problem genauer beschreiben.

#include <stdio.h>

main()

{

char *cptr;

char buff[256];

int zeichen;

int anz_zeichen, i;

/* lokale Variablen initialisieren */

anz_zeichen = 0;

i = 0;

cptr = fgets(&buff[0], 256, stdin);

if (cptr !=NULL) {

while ((zeichen = getchar()) != EOF) {

++i;

}

}

printf("i = <%d>", i);

printf ("\nAnzahl Zeichen = <%d> \n", i);

}

So jetzt hab ich nur noch das Problem, dass er mir die Zeichen erst ab der Zweiten Zeile einliest, er soll aber schon bei der ertsen anfangen (logisch). Ich glaub das hängt mit dem array zusammen ich muss dem doch sagen, dass er bei 0 anfängt?! Das problem ist aber -> wie !

hmm irgendwie verstehe ich das Programm nicht so ganz.

du liest einen String vom stdin ein und wenn dabei kein Fehler aufritt dann liest du solange ein Zeichen wieder vom stdin ein bis getchar() EOF zurückgibt?

Erklär nochmal genau was das Programm machen soll.

und das hier:

cptr = fgets(&buff[0], 256, stdin);

kannnst du so einfacher haben:

cptr = fgets(buff, 256, stdin);

hmm irgendwie verstehe ich das Programm nicht so ganz.

du liest einen String vom stdin ein und wenn dabei kein Fehler aufritt dann liest du solange ein Zeichen wieder vom stdin ein bis getchar() EOF zurückgibt?

Erklär nochmal genau was das Programm machen soll.

und das hier:

cptr = fgets(&buff[0], 256, stdin);

kannnst du so einfacher haben:

cptr = fgets(buff, 256, stdin);

also ich möchte alle zeichen zählen bis ein EOF kommt! hast es glaube schon richtig verstanden, okok das mit dem cptr = fgets(buff, 256, stdin); hat ich auch vorher da stehen habs eben nur geändert weil ich am ausprobieren bin!.

Was verstehst du denn unter EOF?

Du willst also wissen wie lang der String ist den du mit fgets() eingelesen hast oder willst du nach der Stringeingabe zählen wieviele Zeichen vom Benutzer bis zu einer leerem Eingabe eingegeben werden (wenn ja wozu dann der String?)?

ich will die eingegebenen zeichen solange lesen bis ein EOF kommt sprich im UNIX z.B. ein Strg D ich könnte es auch so machen, dass ein EOF kommt wenn ich Enter drücke

Ah gut, damit kommen wir der Sache doch schon näher :)

Ich kann das leider bei mir nicht nachvollziehen, da bei mir unter Windows kein EOF zurückkommt wenn ich Strg+D drücke.

Ok und dein Problem ist jetzt wenn du den String eingibst und danach z.B. ein a und dann ein b eingibst das er erst das b zählt?

Ah gut, damit kommen wir der Sache doch schon näher :)

Ich kann das leider bei mir nicht nachvollziehen, da bei mir unter Windows kein EOF zurückkommt wenn ich Strg+D drücke.

Ok und dein Problem ist jetzt wenn du den String eingibst und danach z.B. ein a und dann ein b eingibst das er erst das b zählt?

pass uff das sieht volgendermaßen aus:

konsole:

ich starte mein proggi:

proggi CR

.........

123

so er zählt jetzt erst in der zweiten zeile obwohl er die punkte auch als zeichen lesen soll!!!!!!! er ignoriert quasi die erste zeile nach dem proggi start, ich weiß nich wo dran es liegt

Achso. Ist doch logisch das er das nicht macht. Du ließt doch erst den String mit fgets() ein (in deinem Beispiel die Punkte). Da du die EIngabe des Strings mit Enter beendest springt er in die 2te Zeile und dann kommt deine Schleife die ab dann die Eingegebenen Zeichen zählt.

Also entweder lässt du die Stringeingabe weg oder du rechnest die Länge des Strings auf deine Zählvariable.

Achso. Ist doch logisch das er das nicht macht. Du ließt doch erst den String mit fgets() ein (in deinem Beispiel die Punkte). Da du die EIngabe des Strings mit Enter beendest springt er in die 2te Zeile und dann kommt deine Schleife die ab dann die Eingegebenen Zeichen zählt.

Also entweder lässt du die Stringeingabe weg oder du rechnest die Länge des Strings auf deine Zählvariable.

ääääm Joa da müsst ich nur wissen wir ich die länge des strings auf die zählvariable rechne :(

jetzt ist es so, dass er die gesamte eingabe pro zeile als ein zeichen sieht und nicht alle zählt!

die Länge bekommst du mit strlen und dann einfach draufaddieren

helf mir mal, wie würde dann der Qtext aussehen DANKE ich raffs nicht :confused: :cool:

supi danke es funktioniert! er liest jetzt den string ein und zählt alle zeichen zusammen, die eingegeben worden sind, sprich alle zeichen aus allen zeilen!

DANKE

:)

#include <stdio.h>


char datnam[40] = "daten.txt";

char datnam2[40] = "daten2.txt";


int main()

{

        FILE * datei;

        FILE * datei2;

        char zeile[256];


        datei = fopen( datnam, "r");

        datei2 = fopen( datnam2, "w" );

        if( datei == 0 )

        {

                printf("\nTja, diese Datei gibt es nicht!\n");

                return;

        }

        while( ! feof(datei) )

        {

                printf("%s", zeile);

                fgets( zeile, 255, datei );

                fprintf(datei2, "%s", zeile);

        }

        fclose( datei );

        fclose( datei2 );

}

äääm hier hab ich volgendes problem: er kopiert mir die letzte zeile der ersten datei, also er schreib sie mir in die zweite doppelt rein! alle anderen stimmen alo als beispiel:

TEXT TEXT TEXT ZEILE 1

TEXT TEXT TEXT ZEILE 2

TEXT TEXT TEXT ZEILE 3

TEXT TEXT TEXT ZEILE 4

TEXT TEXT TEXT ZEILE 5

TEXT TEXT TEXT ZEILE 6

TEXT TEXT TEXT ZEILE 7

TEXT TEXT TEXT ZEILE 8

TEXT TEXT TEXT ZEILE 9

TEXT TEXT TEXT ZEILE 10

TEXT TEXT TEXT ZEILE 10

die bildschirmausgabe zeigt mir aber alles korrekt an!!! nur in die datei schreibt er dann die letzte doppelt

Edit (Klotzkopp): Codetags hinzugefügt

die bildschirmausgabe zeigt mir aber alles korrekt an!!!
Das sieht nur so aus. Du gibt machst schon eine Bildschirmausgabe, bevor du die erste Zeile gelesen hast. Dass dabei kein Müll ausgegeben wird, ist nur Zufall.

Das Problem ist, dass du feof zum falschen Zeitpunkt prüfst. Du musst das zwischen dem fgets und fprintf machen. Denn feof liefert erst dann Wahr, wenn fgets schon einmal fehlgeschlagen ist. Du prüfst das aber erst, nachdem du schon eine ungültige Zeile in die Datei geschrieben hast. Da steht halt noch das vom letzten Einlesen drin.

Das sieht nur so aus. Du gibt machst schon eine Bildschirmausgabe, bevor du die erste Zeile gelesen hast. Dass dabei kein Müll ausgegeben wird, ist nur Zufall.

Das Problem ist, dass du feof zum falschen Zeitpunkt prüfst. Du musst das zwischen dem fgets und fprintf machen. Denn feof liefert erst dann Wahr, wenn fgets schon einmal fehlgeschlagen ist. Du prüfst das aber erst, nachdem du schon eine ungültige Zeile in die Datei geschrieben hast. Da steht halt noch das vom letzten Einlesen drin.

oki ich habs jetzt so gemacht:

while( ! feof(datei) )

        {

                printf("%s", zeile);

                fprintf(datei2, "%s", zeile);

                fgets( zeile, 255, datei );

        }

jetzt geht es auch, thx

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.