HubbeldiBUBB Geschrieben 16. November 2005 Geschrieben 16. November 2005 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 Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 Joa verständlich das das so nicht geht Wenn ich das so sehe würde ich dir erstmal zu nem Tutorial über C raten, mit dem du dich mit den Grundlagen vertraut machen kannst. Zitieren
Klotzkopp Geschrieben 16. November 2005 Geschrieben 16. November 2005 das geht aber alles net Siehe Signatur Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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 Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 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. Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 #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 ! Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 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); Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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!. Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 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?)? Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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 Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 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? Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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 Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 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. Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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! Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 die Länge bekommst du mit strlen und dann einfach draufaddieren Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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: Zitieren
Guybrush Threepwood Geschrieben 16. November 2005 Geschrieben 16. November 2005 na indem du nach dem fgets einfach i = strlen(buff); [/PHP] schreibst. Zitieren
HubbeldiBUBB Geschrieben 16. November 2005 Autor Geschrieben 16. November 2005 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 Zitieren
HubbeldiBUBB Geschrieben 17. November 2005 Autor Geschrieben 17. November 2005 #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 Zitieren
Klotzkopp Geschrieben 17. November 2005 Geschrieben 17. November 2005 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. Zitieren
HubbeldiBUBB Geschrieben 17. November 2005 Autor Geschrieben 17. November 2005 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 Zitieren
Klotzkopp Geschrieben 17. November 2005 Geschrieben 17. November 2005 jetzt geht es auch, thxWenn du sicherstellst, dass am Anfang in zeile nichts drinsteht, ja. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.