008
02.12.2007, 13:49 Uhr
Hans
Library Walker (Operator)
|
Zitat von tester34: |
durch was ersetzt du ungetc, damit es funtkioniert?
|
Durch überhaupt nichts. - Ich hab es gestrichen. Sieh Dir doch mal Deine Schleifenkonstruktion genauer an:
C++: |
while((c=fgetc(fd))!=EOF) { putchar(c); if (c=='t') { ungetc(c,fd); /* <-- Fehler! Dadurch entsteht 'ne Endlosschleife */ fputc(d,fd); } }
|
Du liest ein Zeichen aus der Eingabe (fgetc) und gibst es aus (putchar). Dann prüfts Du, ob es ein 't' ist. Wenn ja, dann stellst Du es in die Eingabe zurück, und gibst stattdessen ein 'Z' aus. Beim nächsten Durchlauf der Schleife liest Du wieder ein Zeichen. Und da kriegst Du dann wieder das 't' geliefert, das Du vorher zurück gestellt hast. Du stellst wieder fest, das es sich um ein 't' handelt, und stellst es wieder zurück... - verstanden?
Wenn Du das ersetzen willst, dann muss Du es an der Stelle auch verwerfen. Wenn Du also feststellst, das ist das Zeichen, das zu ersetzen ist, dann muss es da auch ersetzt werden, und nicht wieder in den Eingabestrom zurück geschoben werden.
Ach ja, bezüglich der Mischung von C und C++ noch etwas: Das kann teilweise zu unerklärlichen Phänomenen führen, die sich oft auch als schwer nachvollziehbare Fehler äussern. Desshalb sollte man das mischen sein lassen.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 02.12.2007 um 13:51 Uhr von Hans editiert. |