Zum Inhalt springen

haddock

Mitglieder
  • Gesamte Inhalte

    173
  • Benutzer seit

  • Letzter Besuch

    Nie

Alle Inhalte von haddock

  1. namespaces sind ein weiterer Weg, in C++ Namenskonflikte zu vermeiden. stell dir vor, in einem großen Projekt schreibt P1 eine Funktion tuwas und P2 tut das auch. Jetzt ist natürlich nicht klar, welche der beiden gemeint ist, wenn man tuwas() aufruft... Also kann P1 schreiben: namespace p1 { void tuwas()... } und dann ist klar, daß ein Aufruf der Form entweder p1::tuwas(); oder using namespace p1; tuwas(); die tuwas() von P1 aufruft. In C++ sind viele Dinge im namespace std definiert, damit klar ist, daß es sich um Standard-Sprachmerkmale handelt. Du kannst die using-Direktive auch weglassen und stattdessen den namespace immer mit angeben : std::cout << "hihi" << std::endl;
  2. #include <iostream> using namespace std; #define X 30 void main(void) { char buffer[X][X]; int i = 0; do { cin.getline(buffer[i++], X); } while((strcmp(buffer[i-1],"")) && (i < X) ); // while(i) cout << buffer[--i] << endl; } [/code] Jetzt mußt du nur noch mit dem Problem umgehen, daß der Benutzer wort1 <enter> aber auch wort2 wort3 <enter> eingeben kann... ...dann mußt du noch die einzelnen Wörter aus den Strings pulen. Alternative: du liest Zeichenweise ein und brichst bei '\n''\n' ab: [code] while(1) { //... if( (c=cin.get()) == '\n') { if(cin.peek() == '\n') break; // zweimal <enter> hintereinander } //... } Dann mußt du "nur" die whitespaces zwischen den Wörtern wegschmeißen und an den Wortgrenzen zum nächsten Array-Element weitergehen (Ich weiß, while(1) mit break ist immer so 'ne Sache... :cool: ) <FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 12:23: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  3. char a[5]; char* b; char c[3][7]; Typ von a : char* Typ von b : char* Typ von c[x] : char* #define BUFFLEN 128 #define ARR 17 char buff[BUFFLEN]; char arrbuff[ARR][BUFFLEN], cin.getline(buff, BUFFLEN); for( int i = 0; i < ARR, i++) { cin.getline(arrbuff[i], BUFFLEN); }
  4. Wenn ich mich erinnere, arbeitest du mit MSVC. Dann markier doch mal "getline" und drück F1. Wenn deine Firma eine anständige Installation hat, sollte die MSDN Library aufgehen, wo du dir anschauen kannst, wie z.B. getline deklariert ist (es braucht mindestens 2 Parameter ). Das heißt nicht, daß ich es dir nicht auch verraten könnte, aber es geht oft schneller <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> istream& getline( char* pch, int nCount, char delim = '\n' ); pch : A pointer to a character array. nCount : The maximum number of characters to store, including the terminating NULL. delim : The delimiter character (defaults to newline). Remarks Extracts characters from the stream until either the delimiter delim is found, the limit nCount?1 is reached, or end of file is reached. The characters are stored in the specified array followed by a null terminator. If the delimiter is found, it is extracted but not stored.
  5. Tja, ein trickiges Problem das damit zusammenhängt wie cin funktioniert. In der Form cin >> charbuf wird halt immer das nächste Stück zusammen hängender nicht-Leerzeiche eingelesen, kommt dieses nicht, bleibt in charbuf der alte Inhalt... Eine Lösung wäre, die gesamte Zeile einzulesen mit istream::getline. Dann wird nämlich alles eingelesen, auch wenn nichts vor <enter> kommt wird dieses nichts eingelesen. Aus diesem string kann dann, wenn er nicht leer ist, mit einem strstream gelesen werden. Oder du läßt dir die Suchbegriffe in einer Zeile geben. Probier mal dieses: #include <iostream> using namespace std; void main(void) { char buffer[30][30]; int i = 0; do { cin >> buffer[i++]; // Leerzeichen, die ggf. am Ende der Zeile stehen, entfernen, sonst evt. Problem... while( (isspace(cin.peek())) && ( cin.peek() != '\n') ) cin.get(); }while( cin.peek() != '\n' ); // Nur um zu schauen, was in buffer so drin ist: while(i) cout << buffer[--i] << endl; } (Es gibt immer noch eine andere Lösung, als man denkt ) <FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 09:53: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  6. Wie wärs damit, die Schleife zum Einlesen zu verlassen, wenn der zuletzt eingegeben String leer ist ?
  7. Ich denke da sollte es kein Problem geben, da Oracle selber schon Zugriffschutz bietet. Je nachdem, wie der Zugriff aussieht - lesend oder schreibend - ist ja auch kein Schutz notwendig. Aber Oracle wird bestimmt dafür sorgen, daß keine zwei user gleichzeitig denselben Datensatz bearbeiten können, dafür gibt es locks auf Zeilen- und Tabellenebene und darüber hinaus eine Transaktionsverwaltung. Ist das eine Produktionsdatenbank oder habt ihr auch ein Testsystem, in letztem Fall würde ich einfach mal versuchen, den GAU auszulösen. Nach dem, was ich über Oracle gelernt habe, sollte dir das nicht gelingen <FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 08:43: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  8. Das ist ja sehr merkwürdig. Ich habe mal folgendes probiert: // *** pfil.cpp *** // wie ist das mit FILE* ? #include <stdio.h> // hast du dieses include? void func(FILE* fil) { int c = fgetc(fil); putchar©; } void main(void) { FILE* f; if( f = fopen("x.txt","r") ) // x.txt muß es natürlich geben { func(f); fclose(f); } } Das kompiliert bei mir sowohl unter M$, gcc wie auch borland anstandslos !?! <FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 08:53: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  9. Meinst du jetzt einen C-String (nullterminiertes char-array) oder ein Objekt der Klasse CString ?
  10. Hast du mal probiert, ob das Prob auch isoliert auftritt, siehe Bsp. ? <FONT COLOR="#a62a2a" SIZE="1">[ 18. Oktober 2001 15:54: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  11. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Also, habe jetzt alle Variablen die ich nur in der Funktion 'Ueberpruefung' brauche dort definiert. Habe jetzt noch fünf Parameter (ging leider nicht weniger, da ich die anderen Sachen auch noch verändert in 'main' brauche. </STRONG>
  12. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Meinst Du ich sollte bestimmte Variablen erst in der Funktion definieren?
  13. :eek: Äääääääähhhhhhhhmmmmmmmmmmmmmm... :eek: ohne dir nahe treten zu wollen - Wenn eine Funktion mehr als vier Parameter braucht, stelle ich mir immer die Frage, obs nicht auch irgendwie anders geht... Wie schon die alten römer sagten: "Teile und herrsche".
  14. ...was ich im Grunde auch meinte und nicht hätte schöner sagen können. Da wäre z.B. der Fall für deine Liste mit variabler Länge, in der du pro Auftrag die einzelnen Positionen speicherst. <FONT COLOR="#a62a2a" SIZE="1">[ 18. Oktober 2001 14:16: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  15. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Hi, also ich bin soweit, das ich im Grunde...
  16. (1) Arrays sind immer von einem einzigen Typ. (2) Arrays sind immer statisch Lösung: (1) definiere dir strukturen mit deinen gewünschten Datentypen, BSP (und das ist nur ein Beispiel, was deiner Problemstellung bestimmt nicht gerecht wird): struct auftrag { int auftragsnummer; char* kundenname; int[] posnr; int[] artikelnr; int[] menge; }; (2) dynamische Datenstrukturen mit C sind z.B. linked lists. Du wirst allerdings nicht mit einer einfachen Liste hinkommen, mach dich mit dem relationalen Datenmodell vertraut und versuch es unter C abzubilden, wenn du dich mit linked lists angefreundet hast auf spezielle Fragen gibts auch speziellere Antworten...
  17. Lies dir die Board-reviews auf www.tweakpc.de www.teccentral.de www.planet3dnow.de durch. Epox 8KHA+ hat ganz gut abgeschnitten...
  18. Was meinst du mit "Directory Browsing" ? Falls es darum geht, ob jemand ein Verzeichnis öffnen darf, regelst du diese Berechtigung über das x-bit des Verzeichnisses. $ man chmod
  19. $ mount zeigt an, welche Laufwerke wie gemountet sind. Dann: $ umount <ntfs-lw> $ mount <ntfs-lw> rw Vorher natürlich: $ man mount
  20. Wie wärs damit, das nueue OS auf eine andere HDD zu installieren und solange die Original HDD auszubauen/stillzulegen ? Um eine ganze FP zu sichern brauchts ja auch eine Menge Platz, da ginge das doch auch gleich so herum ?!?
  21. Also: void XY(char* axy, char* bxy, char** cxy, int* dxy) { // Zugriff innerhalb: *axy = 'm'; strcpy(bxy, "hohi"); bxy[1] = 'i'; strcpy(cxy[0], "eh-oh"); cxy[0][0] = 'o'; *dxy = 42; } Aufruf: XY(&a, b, c, &d); Der Haken sind die char-Arrays, bzw. Arrays davon. Leider werden in C Strings als nullterminierte Arrays von char dargestellt, weswegen die ersten beiden Parameter, obwohl scheinbar gleichen Typs, etwas Grundlegend unterschiedliches sind. axy ist tatsächl ich ein Zeiger auf ein char, weswegen er im Funktionsrumpf dereferenziert werden muß. bxy dagegen ist die Startadresse eines char-Arrays, die Dereferenzierung findet durch den [] Operator statt. Eigentlich (verzeihung, daß ich erst jetzt darauf komme ) kannst du auch wie folgt deklarieren: void XY(char* axy, char[] bxy, char[][] cxy, int* dxy); Dadurch ändert sich nichts, allerdings ist es vielleicht einleuchtender... Noch zur Verwendung von char-Arrays, hast du diesen thread schon gelesen, da steht vielleicht auch ein bißchen Nützliches. <FONT COLOR="#a62a2a" SIZE="1">[ 17. Oktober 2001 12:53: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>
  22. Nur halb, der Typ des Parameters muß stimmen. Wenn du sagst char arrggh[7][7]; ist der Typ von arrggh[0][0] char, der von arrggh[0] ist char* (Zeiger auf char) und der von arrggh ist char** (Zeiger auf Zeiger auf char). Folgender Fall: void a(char* x) {...} void b(char** y) {...} void main() { char arr[3]; char arrarr[2][4]; a( arr ); a( arrarr[1] ); b( &arr ); b( arrarr ); ... } Für jede zusätzliche Dimension des Arrays muß auch eine weitere Indirektion des Zeigers erfolgen, damit der Typ immer stimmt. Ich weiß, das ist Anfangs hartes Brot...
  23. <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Oder bin ich da jetzt voll auf dem Holzweg :confused: ?
  24. Wie wärs mit drei Stellen: Major_release.Minor_release.bugfixes Der Linuxkernel wird z.B. so nummeriert. Dazu kommt noch, daß gerade miner_releases stabil sind für Produktionsumgebungen, ungerade diejenigen, an denen neue features ausprobiert werden. www.kernel.org www.gnu.org Und immer wieder google
  25. Hi Bine, <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> hoffentlich hälts Du mich nicht für total bescheuert

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...