Zum Inhalt springen

haddock

Mitglieder
  • Gesamte Inhalte

    173
  • Benutzer seit

  • Letzter Besuch

    Nie

Alle Inhalte von haddock

  1. void A(char* my_buffer2, char** my_Eingabe, int& my_scnt2) { ... // tu was } main() { ... A(buffer2, Eingabe, scnt2); ... // usw. } So sollte das gehen. Ich vermute, daß du einen C++-Compiler benutzt (sonst könntest du kein 'cout' verwenden ). Mit einem C-Compiler geht das so nicht. Sag, Bienchen, hattest du schon mit Zeigern zu tun ? Ansonsten dürfte das so nicht ganz nachvollziehbar sein... :confused:
  2. Hi, a) was macht die Suche, kam kein post mehr-> alles klar ? // diese Variable ist wirklich global, weil sie // außerhalb jeder Funktion definiert wurde: int a=1; void main() { f1(); // lokales a, Ausgabe :32 cout << a << endl; // Ausgabe :1 f2(); // globales a, Ausgabe :7 cout << a << endl; // Ausgabe :7 denn globales a wurde verändert } void f1() { int a; // lokal, verdeckt globales a a = 32; cout << a << endl; } void f2() { extern int a; a = 7; cout << a << endl; } :eek: ************************************************ :eek: Aber: lieber so nicht, Funktionen sollten sich nie auf etwas verlassen, was außerhalb vielleicht oder vielleicht nicht existiert. Die einzige Schnittstelle sollten die Parameterliste und der Rückgabewert sein, das macht Funktionen so schön portabel. Weiter: Wenn Werte verändert werden, sollte das über den Rückgabewert geschehen, weil die Funktionsparameter als *Kopie* übergeben werde, d.h. es müßten Adressen übergeben werden, dafür sollte man sich mit Zeigern auskennen... Und: wenn mehrere Werte verändert werden sollen, kann man sich mit einem struct behelfen. <FONT COLOR="#a62a2a" SIZE="1">[ 16. Oktober 2001 15:27: Beitrag 3 mal editiert, zuletzt von captain haddock ]</font>
  3. Hihi, die Datei darf natürlich nicht beliebig sein, kein Wort darf länger als 127 Zeichen sein, oder anders - spätestens jedes 127te Zeichen muß ein whitespace sein , ist klar, gelle
  4. OK, ich muß gestehen daß ich am Wochenende *keine* Quelltexte studiert habe... Aber folgenden Vorschlag habe ich für dich: Du speicherst ja deine Suchbegriffe in einem Array von char-Arrays. Um festzuhalten, welche Begriffe gefunden werden, legst du ein weiteres Array von ganzen Zahlen an, das du durchgehend mit 0 initialisierst. Der Trick ist, daß die Indizes beider Arrays korrespondieren. Wenn du nun das Wort in Eingabe[x] findest, erhöhst du den Wert in Gefunden[x] Das Ergebnis gibst du dann zum Schluß in einer Schleife aus: for(int i = 0; i < AnzahlSuchbegriffe; i++) { if(Gefunden[x] > 0) // oder einfach if(Gefunden[x]) { cout << "Das Wort " << Eingabe[x] << " kommt " /* << Gefunden[x] << "mal " */ << "vor" << endl;} } Die Suchwortliste gehst du bei jedem neu eingelesenen Wort durch. Leichter geht das Einlesen einzelner Wörter - als Anzahl zusammenhängenderNicht-Leerzeichen - einfach mit cin and friends. Probier spaßeshalber mal folgendes: #include <fstream.h> void main() { char str[128]; ifstream in("tst.txt"); while(1) { in >> str; if( in.good() ) cout << str << endl; else break; } in.close(); } Du mußt nur eine beliebige Datei "tst.txt" im Verzeichnis, in dem die *.exe liegt, anlegen. Das prg liest die Wörter und gibt sie, eins pro Zeile, wieder aus. Viel Spaß! (Uh, hoppla, ist mir doch glatt quick'n'dirty ein while(1) untergekommen, sorry, schaffst du bestimmt viel anständiger ) <FONT COLOR="#a62a2a" SIZE="1">[ 15. Oktober 2001 16:15: Beitrag 3 mal editiert, zuletzt von captain haddock ]</font>
  5. Vermutlich gehts ja darum, auf NTFS-Partitionen zu schreiben im selben Rechner, auf dem gerade Linux und nicht NT/2k läuft. Ich habs auch schon mehr aus Versehen gemacht, aber generell ist doch Vorsicht angesagt. Andererseits: Experimentell im Linux-Umfeld kann wesentlich stabiler als "release" im Windows Umfeld sein, gelle
  6. haddock

    Hilfe!!!

    Und noch ein Tip: erstmal ein bißchen im Forum stöbern, um nicht dieselben Fragen zum ?-ten Mal zu stellen Der Käptn
  7. Ebent. Dann solltest du z wieder auf 0 setzen, bevors ans nächste Suchwort geht Der Käptn
  8. Hallo Bine, ich kann jetzt deinen Fehler noch nicht lokalisieren, hab mir deien Quelltext aber mal ausgedruckt, vielleicht sehe ich nachher im Zug noch etwas (habe hier auch noch ein bißchen Arbeit ). Was mir aber bis jetzt aufgefallen ist: a) die Bezeichner sprechen nicht alle für sich. Wie wärs z.B. mit int anzahl_vorkommen; // statt z Kommentare? Helfen einem immer selber, zu wissen was man überhaupt tut, denn dann muß man sich, ums hinschreiben zu können, überlegen, was man tun will c) Überleg dir deinen Algorhytmus nochmal genau und schreib ihn dir in Worten auf. Das mache ich auch manchmal, es hilft wirklich. Ich denke, es gibt eine einfachere Lösung als deine bisherige. Oh, ich sehe gerade, daß du in der while-Schleife, in der du z auf ==1 abfragst, z nie auf 0 zurücksetzt, aber immer weiter erhöhst, z kann nur einmal 1 werden und damit gibt es auch nur beim ersten Suchwort eine Ausgabe... Der Käptn
  9. 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>
  10. Vielleicht wäre if(z>0) besser als if(z==1) ? Ist nur Mutmaßung, da ich nicht sehe, wo/wie du z initialisierst bzw. wofür du es genau benutzt... Der Käptn
  11. @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
  12. @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
  13. Versuch mal, ob dir char * getenv( const char * varname ); weiterhilft. Der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 26. September 2001 10:44: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  14. (Original erstellt von multimac)) <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> functions.o: $(CC) $(FLAGS) -c functions.c
  15. haddock

    Funktionen

    Und wieder einer dieser threads, die im Sande verlaufen, wo am Ende niemand mehr weiß, worum es ursprünglich mal ging... Der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 25. September 2001 16:43: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  16. @wapmaster: man hört ja gar nix, brennt es doch nicht so arg ? :confused: @BlondeSuende: kurze Erläuterung: Der Ausbildende ist derjenige, der die Berechtigung zum Ausbilden hat, z.B. der Meister. Der Ausbilder ist derjenige, der tatsächlich, persönlich die Ausbildung vermittelt. Das kann z.B. ein vom Meister beauftragter Geselle sein. Ich wähle bewußt die Begrifflichkeit aus dem Handwerk, weil hier die Befugnisse noch enger mit den Bezeichnungen verknüpft sind (was auch immer man sonst davon halten mag). Der Käptn
  17. Ich bin zwar in einer anderen Situation da ich eine Umschulung zum FIAE bei einem Bildungsträger mache, andererseits bin ich Handwerksmeister und weiß aus dieser Richtung in etwa Bescheid über Rahmenbedingungen von Ausbildungen. Vielleicht schilderst du etwas genauer, worum es geht. Es gibt einen Rahmenlehrplan, der verbindlich ist. Es ist aber so, daß Azubis "ans Berufsleben herangeführt werden sollen", was Aufgaben beinhalten kann, die nicht im Lehrplan stehen, wenn der betriebliche Ablauf es erfordert, wie Botenfahrten, Werkstatt kehren... Schreib einfach mal. Der Käptn
  18. Ja, man nennt mich auch Käptn Bahlsen, aber Scherz beiseite: Auf gnu.org gibt es eine Seite mit make manuals (gogle macht's möglich) Ansonsten empfehle ich Dir von Herold bei Addison-Wesley, entweder in der Linux/Unix-Kurzreferenz (hier sinds nur ein paar Seiten, die du dir vielleicht kopieren kannst, wenn du an das Buch leihweise rankommst; es ist relativ günstig, alllerdings auch sehr konzentriert) oder in den Linux/Unix Profitools. Da ist, insbesondere im Letzeren, genau beschrieben wie Makefiles aussehen. Knusper, knusper, der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 20. September 2001 14:29: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  19. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Hasi: <STRONG> och jetzt sei doch nicht so penibel </STRONG>
  20. Spät eingestiegen, sorry, jetzt muß ich nochmal olle Kamellen aufwärmen: @Hasi (hallo Hasi ) : %s in einem printf Aufruf gibt nicht das gesamte char-Array aus, sonder lediglich die Zeichen vor dem Terminator. Diesen fügt strcpy automatisch ein. Ich glaube, die ganze Diskussion wäre einfacher, wenn Dirk12345 wüßte, wie in C Strings dargestellt werden. Also: Strings werden in einem Array von Werten des Typs char gespeichert. Diese stehen im Speicher in der richtigen Reihenfolge im Speicher hintereinander. Der Bezeichner hat den Typ char*, also Zeiger auf char, und zeigt auf das erste Zeichen. Hinter dem letzten Zeichen des Strings steht ein weiterer Wert, nämlich '\0' oder 0x0. Alle Funktionen der stdlib setzten diesen Terminator voraus, denn er markiert das Ende der Zeichenkette ! Beispiel: char tst[7]; // Typ von tst: char* tst[0] = 'b'; // Typ von tst[0]: char tst[1] = 'l'; tst[2] = 'a'; // Probe: printf("%s\n", tst); // oje, kein Terminator, irgendwelcher Müll wird nach "bla" ausgegeben... :-( // Wenn's noch nicht zu spät ist, // oder irgendwo dann doch zufällig '\0' stand: tst[3] = '\0'; printf("%s\n", tst); // Ausgabe: bla // nämlich tst[0] bis tst[2], tst[3] etc. werden nicht ausgegeben // Erst jetzt äquivalent zu : strcpy(tst, "bla"); // andere Probe: printf("%d %c %c %s\n", tst, tst, *tst, tst); /* Erster Wert: Zeigeradresse Zweiter Wert: interpretiert den char, der an der Adresse tst steht, als Zeiger auf char und den Wert an der Adresse, auf die dieser zeigt, als char Dritter Wert: der char an der Adresse tst Vierter Wert: Alle Zeichen ab Adresse tst bis das nächste Zeichen '\0' ist */ Merke: in C werden nie Arrays, sondern lediglich deren Startadresse benutzt ! char bla[4] = "bla"; ist gleichbedeutend mit char* bla = "bla"; Auch im ersten Fall ist der Typ von bla char*. Hoffentlich habe ich mich verständlich genug ausgedrückt und es hat ein bißchen geholfen Der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 19. September 2001 13:49: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  21. haddock

    Funktionen

    @EisenUli: *räusper* - hada nennt sich eigentlich haka... Der Käptn
  22. @poldi: <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> da ich nie weiß, wie groß die drecksdinger werde, ist der direktzugriff ohne prüfung gefäääährlich, daher denke ich, daß es eine methode mit prüfung schon gibt, oder?
  23. haddock

    Funktionen

    @EisenUli: <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Was Du ueber die Modularisierung von Funktionen und Globals schreibst, ist ganz richtig. Andererseits gibt es Faelle, in den es guenstig ist, wenn eine Funktion so etwas wie ein Gedaechtnis besitzt.
  24. haddock

    Funktionen

    Genauigkeit in den Definitionen hin oder her - der einzige Austausch einer Funktion mit dem "Rest der Welt" sollte doch lieber ausschließlich über Prameterübergabe/Rückgabewert stattfinden, sonst ist das angestrebte Prinzip der Modularisierung für die Füße, und wir können gleich wieder GOTO schreiben. Man sollte in Funktionen definitiv keine Annahmen machen, was außerhalb existiert, mit Ausnahme von Dingen die man per header sicher einbinden kann, wie stdout/stdin etwa. Sobald der gäußerte Wunsch aufkommt, sollte man das Programmdesign sehr kritisch in Frage stellen. Der Käptn

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...