Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ein-/Ausgabefunktion fragen

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 < [ 2 ] [ 3 ]
000
05.11.2007, 14:48 Uhr
wolf360




C++:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   int c;
   FILE *datei;
   datei=fopen("test.txt", "r");
   if(datei != NULL) {
      while( (c=fgetc(datei)) != EOF)
         putchar(c);
   }
   else {
      printf("Konnte Datei nicht finden bzw. öffnen!\n");
      return EXIT_FAILURE;
   }
   getchar();
}



wasrum müssen hier in der while schleife das c=fgetc(datei) in klammern gesetz werden??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.11.2007, 16:17 Uhr
xXx
Devil


Weil erst die Anweisung in der Klammer ausgeführt wird (c wird der Wert, an der aktuellen Position in der Datei, zugewiesen) und dann geguckt wird, ob c != EOF (End of File) ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.11.2007, 16:19 Uhr
wolf360



achso und ohne die Klammer würde er zuerst des EOF überprüft werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.11.2007, 17:04 Uhr
xXx
Devil


ehm sollte dann gucken ob fgetc(datei) == EOF ist und dann entweder 1 oder 0 c zuweisen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.11.2007, 13:31 Uhr
wolf360




C++:
/* fgetc2.c */
#include <stdio.h>
#include <stdlib.h>
void read_char(FILE *stream) {
   int c;
   while( (c=fgetc(stream)) !=EOF)
      putchar(c);
}
int main(int argc, char **argv) {
   FILE *datei;
   char filename[255];
   /* Falls die Datei zum Öffnen nicht
    * als Argument übergeben wurde ... */

   if(argc < 2) {
      printf("Welche Datei wollen sie öffnen : ");
      scanf("%s",filename);
      datei = fopen(filename ,"r");
      if(datei != NULL)
         read_char(datei);
      else {
         printf("Fehler beim Öffnen von %s\n",filename);
         return EXIT_FAILURE;
      }
   }
   else {
      datei=fopen(argv[1],"r");
      if(datei != NULL)
         read_char(datei);
      else {
         printf("Konnte %s nicht öffnen!\n",argv[1]);
         return EXIT_FAILURE;
      }
   }
   return EXIT_SUCCESS;
}



Das ist ein Programmbeispiel vom Buch, aber irgendwie klappt das nicht bei mir, weiß aber nicht warum...?

Ich habe im selben Verzeichniss wo die Anwendung ist, eine Datei test.txt erstellt. Wenn ich dann eingebe test.txt sagt ehr Fehler beim Öffnen??

Was ich auch nicht verstehe ist das:

int main(int argc, char **argv)

Warum **argv? In einem anderm Thread wurde mir gesagt das das für ein 2 Dimensionales Array steht, aber warum ein 2 Dimensionales Array ?? und warum vereinbart er das in der Klammer und nicht danach?

Dieser Post wurde am 07.11.2007 um 14:28 Uhr von wolf360 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.11.2007, 14:38 Uhr
xXx
Devil



Zitat:
Warum **argv? In einem anderm Thread wurde mir gesagt das das für ein 2 Dimensionales Array steht
2D char-Array, korrekt.

Zitat:
Aber warum ein 2 dimensionales Array?
Ganz einfach. Ein String wird in C durch einen Array von Zeichen (char's) mit einem Nullterminierungszeichen am Ende dargestellt.

C++:
const char* text = "Das ist ein Test";

So. Nun kannst du aber deinem Programm nicht nur ein Argument übergeben, sondern mehrere!
Dann brauchen wir also eine Array von Strings. Also eine zweidimensionalen Array von Zeichen

Zitat:
Warum vereinbart er das in der Klammer und nicht danach?
Du willst wissen warum die Variable ein Funktionsparameter von main ist? Ganz einfach. Im Standard ist main entweder komplett ohne Argumente oder mit (int, char**) definiert. Dabei steht argc für die Anzahl der Argumente und argv für die Argumente. Nun sollte argc immer wenigstens 1 sein, da in argv[0] der Pfad zu der ausgeführten *.exe steht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.11.2007, 14:45 Uhr
wolf360



mhhh... okey!! danke für die erklärung,
aber waum funktioniert das programm nicht bei mir?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.11.2007, 15:55 Uhr
wolf360



kann mir keiner sagn warum das bei mir nicht funktioniert ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.11.2007, 16:25 Uhr
öni



Kommt den eine Fehlermeldung? Oder kannst du nur die Datei nicht öffnen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.11.2007, 16:49 Uhr
wolf360



ich kann nur die datei nicht öffnen abber sie gibt es, wenn ich des ohen eingabe öffnen lass also halt schon eingebe datei = fopen ("test.txt","r"); dann klappts!!

gruß wolf360
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: