Buchstabe einer Datei als Variable speichern
-
Du hast halt auch die Klammern souverän weggelassen. So sollte das gehen:
(quelle=fopen("datei.txt","a+")); fseek(quelle, 0L, SEEK_SET); // auch unnötig, nach fopen() steht's nun mal am Anfang while( (c=getc(quelle)) != '*') // überliest alles bis zum ersten '*' und gibt's aus putc(c,stdout); fseek(quelle, -0L, SEEK_CUR); // und noch mal von vorne ? while( (c=getc(quelle)) != '*'){ if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich"); }In der Kürze liegt die Würze:
while ( (c = getc( quelle))){ if ( c == EOF || c == '*') break; putchar( c, stdout); } rewind( quelle); while ( (c = getc( quelle)) != EOF) printf( c == 'b' ? "gleich" : ungleich");
-
Danke
hab deine Lösung mal ausprobiert
als erstes kam die Fehlermeldung
aktuell.c:14: Fehler: zu viele Argumente für Funktion »putchar«
hab dann das putchar wieder durch putc ersetzt
dann gabs zwar keine fehlermeldung mehr aber ganz viele ungleichs in der ausgabeGruß Isgri
-
Ups - vertippt.
Was ist eigentlich in der Datei ?
-
erst mehrere zeilen text
dann ein * zum trennen
und dann 1 buchstabe (kleines b)
danach nichts mehr
-
Poste mal den kompletten Code.
-
ok, hier
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *quelle; int c; char datei[20]; long pos = 0; (quelle=fopen("datei.txt","a+")); fseek(quelle, 0L, SEEK_SET); while( (c=getc(quelle)) != '*') putc(c,stdout); fseek(quelle, -1L, SEEK_CUR); while( (c=getc(quelle)) != EOF) if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich"); }Die datei sieht so aus
text
text
text
text
text
*
bist der letzte buchstabe der datei kein b kommt die meldung ungleich, ist er ein b lautet die ausgabe gleichungleich
-
Da fehlen immer noch die Klammern um das while, dann sollte es gehen.
So wird nur die erste Anweisung nach dem while ausgeführt und es kommt
natürlich doppelt.
-
ne, geht leider nicht
wenn ich eine klammer um das while mach, gibts ne fehlermeldung
und wenn ich welche um die if-anweisungen mache, dann wird die ausgabe wieder länger
-
Poste Code ...

-
hier:
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *quelle; int c; char datei[20]; long pos = 0; (quelle=fopen("datei.txt","a+")); while( (c=getc(quelle)) != '*') {putc(c,stdout);} fseek(quelle, -2L, SEEK_END); while( (c=getc(quelle)) != EOF) {if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich");} }
-
zefix, mach doch mal diese §%§&§%-Klammern rein, dann geht's:
while( (c=getc(quelle)) != EOF)[b]{[/b] {if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich"); [b]}[/b]
-
aber das sind doch die gleichen wie ich hatte, nur das sie jetzt eine zeile drüber bzw. drunter stehen
das sollte doch eigentlich egal sein, wo die stehen, oder?
geht übrigens immer noch nicht.
kann es vielleicht sein, das es irgendwie am compiler/OS liegt, dass es bei mir net geht?
-
Sorry - ich gebe das jetzt auf und buche das auf Deine Ignoranz, Beratungsresistenz und Doofheit.
Lerne Word-Basic.Verplempere anderer Leute Zeit, nicht mehr meine.
-
wenn man es als beratung bezeichnet den code praktisch unverändert zurückzugeben, und zu behaupten, er funktioniere, dann kann man mich wirklich als beratungsresistent bezeichnen^^
(wenn mir jemand erklärt wieso es einen unterschied macht, ob die { am ende der zeile steht oder am anfang der nächsten zeile, dann nehm ich alles zurück (zumindest mein compiler macht da anscheinend keinen unterschied))
-
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *quelle; int c; char datei[20]; long pos = 0; quelle=fopen("datei.txt","a+"); while( (c=getc(quelle)) != '*') { putc(c,stdout); } fseek(quelle, -2L, SEEK_END); while( (c=getc(quelle)) != EOF) { if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich"); } }so hier der code bischen gescheid eingerückt... was geht jetzt nicht????
P.S.: am ende solltest noch
fclose(quelle);machen
was passiert wenn du die erste while schleife und das fseek weg lässt? findest er dann das b?
-
BorisDieKlinge schrieb:
while( (c=getc(quelle)) != '*') { putc(c,stdout); }besser so. ist lesbarer und provoziert keine 'assignment in condition' compiler-warnungen:
for (;;) { int c = getc(quelle); if (c == '*') break; putc (c, stdout); }und dafür
BorisDieKlinge schrieb:
if (c == 'b') printf("gleich"); if (c != 'b') printf("ungleich");gibts 'else'

-
Hallo,
-fricky- schrieb:
BorisDieKlinge schrieb:
while( (c=getc(quelle)) != '*') { putc(c,stdout); }besser so. ist lesbarer und provoziert keine 'assignment in condition' compiler-warnungen:
Wenn es so geschrieben ist, dann sollte da eigentlich keine solche Warnung entstehen, welcher Compiler warnt denn hier trotzdem?
MfG,
Probe-Nutzer
-
Probe-Nutzer schrieb:
Wenn es so geschrieben ist, dann sollte da eigentlich keine solche Warnung entstehen, welcher Compiler warnt denn hier trotzdem?
naja, die klammern um die zuweisung verhindern dies. ich würde es aber trotzdem so nicht hinschreiben.

-
for (;;) { int c = getc(quelle); if (c == '*') break; putc (c, stdout); }oder so
for(char c= getc(quelle); c != '*' ; c= getc(quelle)) putc (c, stdout);^^
-
BorisDieKlinge schrieb:
oder so
for(char c= getc(quelle); c != '*' ; c= getc(quelle)) putc (c, stdout);^^schwach. das 'putc' passt doch auch noch irgendwo in's for-statement mit rein.
