Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » verwendung von unget

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.11.2007, 14:02 Uhr
wolf360



Okey bei meinem Buch bin ich grad bei der Funktion ungetc angekommen blos versteh ich nicht wirklich die genaue Verwendung, im Buch wird mir ungetc anahand dieses Beispiels erklärt:


C++:
/* grown_file.c */
#include <stdio.h>
#include <stdlib.h>
/* Bitte anpassen */
#define DATEI "datei.txt"
int main(void) {
   FILE *fp;
   int c;
   fp = fopen(DATEI, "r");
   if(fp == NULL) {
      fprintf(stderr, "Konnte %s nicht öffnen\n", DATEI);
      return EXIT_SUCCESS;
   }
   while(1) {
      while(c=fgetc(fp)) {      /* Zeichenweise einlesen */
         if(c == EOF)           /* Ist es EOF */
            ungetc(c,fp);       /* Letztes Zeichen zurück */
         else
            fputc(c, stdout);   /* Ausgeben */
      }
   }
   /* Wird nie erreicht */
   fclose(fp);
   return EXIT_SUCCESS;
}




aber das ist doch das gleich wie:

C++:
/* grown_file.c */
#include <stdio.h>
#include <stdlib.h>
/* Bitte anpassen */
#define DATEI "datei.txt"
int main(void) {
   FILE *fp;
   int c;
   fp = fopen(DATEI, "r");
   if(fp == NULL) {
      fprintf(stderr, "Konnte %s nicht öffnen\n", DATEI);
      return EXIT_SUCCESS;
   }
      while(((c=fgetc(fp)) != EOF)) {
         putchar(c);  
      
      }
  
   fclose(fp);
   return EXIT_SUCCESS;
}




oder nicht ?

Dieser Post wurde am 27.11.2007 um 14:26 Uhr von wolf360 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.11.2007, 15:11 Uhr
ao

(Operator)



Zitat:


C++:
         if(c == EOF)           /* Ist es EOF */
            ungetc(c,fp);       /* Letztes Zeichen zurück */




Der Sinn hiervon erschließt sich mir nicht. Warum will jemand ein EOF in den Stream zurückstopfen? Abgesehen davon, dass EOF kein Zeichen im üblichen Sinn ist, sondern ein Anzeiger dafür, dass der Datenstrom leer ist, dass also *kein* Zeichen mehr zu holen ist.

??

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.11.2007, 15:35 Uhr
wolf360



das is ein Beispiel aus dem Buch?! C von A bis Z
Dieser Post wurde am 27.11.2007 um 15:35 Uhr von wolf360 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.11.2007, 17:16 Uhr
Pablo
Supertux
(Operator)


Dieses Buch ist so verbuggt, da liest man immer wieder nur Quatsch.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.11.2007, 17:27 Uhr
wolf360



lol okey,

könnt ihr mir dann mal die richtige Verwendung von ungetc sagn ? Bzw ein Beispiel wofür ich es wiklich brauche ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.11.2007, 09:16 Uhr
ao

(Operator)


Lies mal hier nach - auch die Feinheiten sind ganz interessant: http://opengroup.org/onlinepubs/007908799/xsh/ungetc.html

Brauchen könnte man ungetc zum Beispiel, wenn man einen Interpreter schreibt, der aus einem Datenstrom gefüttert wird. Der Interpreter könnte mehrere Zustände haben, z.B. einen Datenmodus, in dem Daten kommen, z.B. Bilder, die der Interpreter anzeigt, und einen Befehlsmodus, in dem der Datenstrom Einstellungen des Interpreters steuert.

Was macht man nun, wenn man unerwartete Zeichen bekommt, mit denen man im aktuellen Zustand nichts anfangen kann? In den anderen Zustand wechseln und es noch mal versuchen. Da die Zeichen wichtig sein können, sollen sie nicht verloren gehen. Dann ist es ganz nett, wenn man das schon erhaltene Zeichen einfach wieder zurückgeben kann.

Die Alternative wäre, dass man sich um die schon abgeholten Zeichen selber kümmern muss. Das macht aber das Programm umständlich. Einfacher ist, wenn der Datenstrom diesen Dienst zur Verfügung stellen kann.

Gruß
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: