Woodstock Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 Hi, ich schon wieder. Ich komme einfach nicht weiter. Sieht an dem Punkt wo ich nicht weiterkomme so aus: cout << "Bitte geben Sie die List-Datei mit Pfad an: "; cin >> Liste[scnt]; fy = fopen (Liste[scnt], "r"); if (fy == NULL) cout << "Feler - List-Datei nicht gefunden!\n"; else { do { fgets (buffer3, 1000, fy); _strlwr(buffer3); strcpy(Datei[scnt], buffer3); scnt++; } while ((fgets (buffer3, 1000, fy))!= 0); Warum liest er in Datei immer nur jede zweite Zeile aus der Datei ein? Bine Zitieren
Hasi Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG> 1 do 2 { 3 4 fgets (buffer3, 1000, fy); 5 _strlwr(buffer3); 6 strcpy(Datei[scnt], buffer3); 7 scnt++; 8 } while ((fgets (buffer3, 1000, fy))!= 0); </STRONG> Zitieren
Woodstock Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 Ich habe keine Angst dass Du mich nicht findest, hast Du bisher ja immer geschafft. Ich bin wohl einfach zu dumm dazu. Bine Zitieren
Woodstock Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 Gut, also das mit dem auslesen klappt ja jetzt, aber wenn ich mehr als eine Datei (in mehr als einer Zeiler) in der List-Datei angebe, kann ich die Dateien nicht mehr öffnen. Woran liegt das, denn die Position ist genau richtig. Bine Zitieren
Hasi Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Ich habe keine Angst dass Du mich nicht findest, hast Du bisher ja immer geschafft. Ich bin wohl einfach zu dumm dazu.</STRONG> Zitieren
Hasi Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Gut, also das mit dem auslesen klappt ja jetzt, aber wenn ich mehr als eine Datei (in mehr als einer Zeiler) in der List-Datei angebe, kann ich die Dateien nicht mehr öffnen. Woran liegt das, denn die Position ist genau richtig.</STRONG> Zitieren
Woodstock Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 Wie kann ich das checken? Wenn ich mir die einzelnen Arrays ausgeben lassen, in die ich mit fgets etwas gespeichert habe, dann gibt er mir genau die Zeilen die in meiner List-Datei stehen. Soll ich also extra ein Nullzeichen anfügen? Aber warum klappt es dann wenn ich nur eine Datei in der Listdatei angeben? Fragen über Fragen und ich blicke schon fast nicht mehr durch... Bine Zitieren
gajUli Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 Zwitscher, vor allem vermisse ich fclose(). Ansonsten ist es wohl Kleinarbeit. Notfalls muss man halt jede kritische Zeile debuggen. Uli Zitieren
Woodstock Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 Das fclose() kommt bei mir ganz unten, ist hier nur nicht mit aufgeführt, weil ich noch einiges mehr drin habe in dem Programm, was für mein Problem aber nicht interessant ist, da dieses vorher auftritt. Bine PS: Aber wenigstens weißt Du das ich ein Vogel bin, und nicht z.B. das Festival... Zitieren
Hasi Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 He Binchen, also mit dem fclose() muss ich dem Uli recht geben du hast im anderen Thread(ich denk einfach mal es ist das gleiche Programm) dass hier gepostet for (j = 0; j < scnt-1; j++) { Gefunden = 2; fz = fopen (Datei[j], "r");} dass heisst du oefnest mit dem Zeiger fz immer ne andere Datei... ich kann mir nicht vorstellen dass das funktioniert da musst du schon dazwischen diese Datei immer schliessen bevor du ne neue aufmachst Zitieren
gajUli Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG> PS: Aber wenigstens weißt Du das ich ein Vogel bin, und nicht z.B. das Festival...</STRONG> Zitieren
Ketzer Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 Hi, keine Ahnung ob das bei diesem Problem hift, aber: 1. Das verwenden sprechender Bezeichner schafft Verständnis (fy ist eher unverständlich, zumindest aber nicht intuitiv verständlich) Wie wäre es mit z.B. Datei01 statt fy ? (es passiert mir zum Teil sonst auch, das ich es irgendwann nicht mehr verstehe, was ich da programmier habe) 2. Strings sind eine böse Falle! Denn ein String ist ein terminiertes Char-Array. Das heißt erst wenn ein x00 kommt ist der String zuende. (Da kann es dann auch schonmal schnell passieren das man über das eigendliche gedachte Ende hinausließt...==> Protection Exeption) Also entweder als Chararray benutzen oder terminieren. (z.B. durch vorinitialisierung memset(einlesebereich,0x00,<länge der Variablen> ) ???geht die längen Bestimmung hier eigendlich mit sizeof??? (oder erhalte ich dann die größe des pointers?) Greetz Ketzer Zitieren
Woodstock Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 Ich habe es soweit heute geschafft. Bin einen Schritt weiter, danke Euch! Bine Zitieren
Woodstock Geschrieben 12. Oktober 2001 Autor Geschrieben 12. Oktober 2001 Moin, moin! Kann mir einer sagen wie die Bedingung einer 'do while' Schleife sein muss, in der etwas in eine char Array eingelesen wird, damit sie abbricht, wenn nur 'Enter' gedrückt wurde? Bine Zitieren
Ketzer Geschrieben 12. Oktober 2001 Geschrieben 12. Oktober 2001 Hi Woostock, ich habe leider gerade keine C-Reference hier und auswenig kenne ich die Funktionen nicht alle. Aber es gibt eine Funktion kbhit() die abprüft ob eine Taste gedrückt wurde. Anschließend kannst du das Zeichen dann auchlesen und mit \n vergleichen. Aussehen müßte die Laufzeitbedingung ungefähr so: while(!kbhit()) { ... } Aber warum machst du das nicht mit scanf()? scanf(%s,&wohin_es_soll); scanf beendet die Eingabe wenn entweder enter oder return gedrückt wurde. Greetz Ketzer Zitieren
Woodstock Geschrieben 12. Oktober 2001 Autor Geschrieben 12. Oktober 2001 Also, ich will dem User die Möglichkeit geben mehrere Suchbegriffe einzugeben, und ihm auch die Möglichkeit geben, das wenn er keinen weiteren Suchbegriff mehr eingeben möchte, er einfach nur 'Enter' drücken muss. Ist das auch das was Du meinst? Wenn ja, wie soll ich das mit scanf machen? Bine Zitieren
gajUli Geschrieben 12. Oktober 2001 Geschrieben 12. Oktober 2001 Kuckuck, Du koenntest eine main() mit variabler Parameterliste nehmen. Such Dir mal eine gute C-Beschreibung und sieh nach, wie man das macht. Hier im Forum hatten wir auch schonmal drueber diskutiert vor ein paar Wochen. Ansonsten ist es besser, den ganzen Input-String auf einmal einzulesen und im Speicher die Suchbegriffe rauszuparsen. Uli Zitieren
haddock Geschrieben 12. Oktober 2001 Geschrieben 12. Oktober 2001 @ketzer: Vorsicht - scanf() liest nur bis zum nächsten whitespace und läßt den Rest im Eingabepuffer stehen. Wenn du also eintippst: $ ene mene muh[enter] und dies einliest mit scanf("%s", mein_pointer_auf_char); // char* ist bereits eine Adresse... dann ergibt puts(mein_pointer_auf_char); leider nur ein $ ene Und im Eingabepuffer liegt ein verwahrlostes "mene muh\n" (whitespaces übergeht scanf() ). Sinnvoll für die Verwendung von scanf() wäre die Verwendung eines dynamischen Arrays von char* oder eine verkettete Liste, aber das wird hier vielleicht ein bißchen viel... Wie Uli schreibt, ist es sinnvoller, die ganze Benutzerzeile in einen C-String einzulesen und dann intern nach den einzelnen Suchbegrffen zu parsen. Das erzähle ich ja eh immer mal wieder Das befreit natürlich nicht von dem Problem, wo man die Suchbegriffe hinterher hin tut. Der Käptn Zitieren
Woodstock Geschrieben 12. Oktober 2001 Autor Geschrieben 12. Oktober 2001 Das Problem bei den C-Strings ist bei mir nur, das ich damit noch gar keine Erfahrungen gemacht habe, kommen in dem Buch aus dem ich lerne erst viel später, und ich damit deswegen gar nicht arbeiten kann. Steige da einfach nicht durch, wie ich was zu machen habe. Dynamisches Array wollte ich am Anfang machen, aber mein Chef sagt, ich soll es ohne machen. Bine Zitieren
haddock Geschrieben 12. Oktober 2001 Geschrieben 12. Oktober 2001 @Woodstock: Zu deiner eigentliche Frage: a) do..while ist meistens out... int c,i=0; char buf[GROESSE]; // Zweite Schleifenbedingung reine Sicherheitsmassnahme... while( ((c = getchar()) != '\n') && (i < (GROESSE-1) ) ) { buf[i++] = c; } buf = '\0'; // *sehr* wichtig ! Der Käptn Zitieren
haddock Geschrieben 12. Oktober 2001 Geschrieben 12. Oktober 2001 Ach du meine Güte, das geht bei dir ja überall und nirgends los... :eek: Meine Meinung (sorry ) ist, daß man erstmal mit C halbwegs prozedural programmieren können sollte - und anders sieht dein Code bisher nicht aus - bevor man C++ Dinge benutzt, dazu zählt schon cin, cout... wobei cin dieselbe Problematik wie scanf() mt sich bringt Und wenn du Suchgeschichten machst, halte ich es für geradezu notwendige Voraussetzung, daß du weißt, wie C-Strings aussehen , und dafür ist es wieder sinnvoll zu wissen, was in etwa ein Zeiger ist... (auf die Gefahr hin, dich zu entmutigen, ist aber nicht so gemeint) . Aber du bist ja nicht alleine hier Der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 12. Oktober 2001 13:50: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font> Zitieren
Woodstock Geschrieben 12. Oktober 2001 Autor Geschrieben 12. Oktober 2001 captain haddock: bitte einmal in den Thread 'Ausgabe nur einmal schaun'! Danke Bine Zitieren
eax Geschrieben 14. Oktober 2001 Geschrieben 14. Oktober 2001 mal so ne frage dein array in dem du den pfad speichern willst... wie initialisierst du die variable? entweder in einer schleife mit while ... oder vielleicht mal so... char pfad[256]; cin >> pfad; oda in c, scanf("%s", &pfad); aber in c++ gibt's ne extra header namens fstream.h... in c benutzt man einfach die stdio.h mit fopen.... ciao eax ps: hoffe habe mich nicht vertippt oder sonst irgendwas.. 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.