Zum Inhalt springen

Hakawamu

Mitglieder
  • Gesamte Inhalte

    153
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Hakawamu

  1. ich versteh immer noch nicht richtig. in dem c wird immer das jeweilige gelesene zeichen gespeichert. und nummern in strings kannst du mit der funktion sprinf "convertieren" z.b. sprintf(mein_string, "%d", ein_integer) dann ist die zahl als sting in mein_string. wenn du aus einem string eine zahl machen möchtest, dann gibt es dafür die funktion atoi. dazu musst du noch die stdlib.h includieren.
  2. "char c" deklariert einen char, mit dem variablennamen "c". genau wie "int summe" eine variable vom typ int mit namen summe deklariert. der speicherplatz wird damit reserviert. bei einem int sind das i.d.R. 32bit und bei einem char 8 bit. 1 char wird auch gern als 1 ascii-zeichen gesehen, die haben auch 8bit. mit strcmp() (d.h. string-compare) hast du die möglichkeit 2 strings zu vergleichen. wenn du strcmp("hallo","hallo") schreibst, dann gibt dir die funktion 0 zurück, d.h. die beiden strings sind gleich. bei strcmp("hueh","hott") kommt ein wert ungleich null raus. für "hueh" oder "hallo" oder "hott" kannst du natürlich auch variablennamen einsetzen (dann aber ohne anrührungszeichen *g*), wie z.b. mein_string.
  3. also ein zeilenende erkennst du daran, dass das letzte zeichen ein '\n' ist. du hast die möglichkeit in C eine datei zeichenweise einzulesen, mit der funktion fgetc(FILE *fp). diese funktion gibt dir immer das nächste zeichen. wenn du am ende einer zeile angekommen bist, gibt sie also '\n' zurück, bzw. 10, da das der dezimale ascii-wert von '\n' ist. du kannst also in einer schleife die datei wie folgt einlesen: fp = fopen("meinedatei.txt", "r"); char c; while(c != EOF) { c = fgetc(fp); if(c == ';') printf("Hier beginnt, bzw. endet (je nachdem wie du's siehst) eine spalte\n"); if(c == '\n') printf("Hier ist die Zeile zu ende und mit dem naechsten Zeichen beginnt die naechste Zeile\n"); } [/PHP] während du vom zeilenanfang bis zum nächsten semikolon "läufst" kannst die zeichen in einem string ablegen. z.b. so: [PHP] char mein_string[128]; int i=0; rewind(fp); // setzt den filepointer (fp) wieder auf den anfang der datei while(c != EOF) { c = fgetc(fp); if(c == ';') { printf("Hier endet die spalte\n"); mein_string[i] = '\0'; //dein string sollte immer mit dem zeichen '\0' abgeschlossen werden break; // du verlässt die while-Schleife } else { mein_string[i] = c; i++; } } so hast du vom anfang der datei, vom zeilenanfang bis zum ersten semilonon die zeichen in mein_string abgelegt.
  4. das hättest du tun sollen *g* hier übrigens noch eine kleine information:
  5. ich dachte eigentlich dass das format so bleiben muss ^^ wenn du alles mit Simikoli trenns, dann sollte das doch gar kein Problem sein =)
  6. fscanf liest aus einer datei. und sscanf aus einem string (der puffer) ansonsten verhalten sich die funktionen komplett identisch
  7. beim fscanf kannst du soweit ich weiss nicht auslassen, nein müsstest alles was müll ist in eine temporäre variable lesen. ich kann aber nur sagen was ich weiss, vielleicht gibt es auch andere möglichkeiten ...
  8. also ich habs gerade probiert, mit fscanf. ich habs nit hinbekommen... der trennt es immer an den leerzeichen _und_ tabs. ich würde mich auch nie auf tabs verlassen. können ja auch leerzeichen sein. und bei einigen editoren sind sie das auch
  9. du kannst ja nach jeden eingelesenen datensatz prüfen ob es der richtige ist. wenn nicht, gehst du zum nächsten und so weiter. wenn du den Datensatz am ende nicht gefunden hast, dann gibts es ihn nicht (oder dein programm hat einen fehler) für den anfang solltest du auf jeden fall immer den Datensatz ausgeben, nachdem du ihn eingelesen hast. und das mit dem fscanf ist so ein Problem. da du die zeilen formatiert einliest. d.h. wenn du fscanf(fp, "%d %c %f %s %s", ...) benutzt erwartet fscanf z.b. folgendes: "8273 a 9800.12 hallo plopp". d.h. es liest immer den datentyp, der da angeben ist. und auch in der reihenfolge. und die elemente sind durch leerzeichen getrennt. Das Problem ist nun, dass eine Zeile in Element mehr hat. denn die "große gasse" besteht aus 2 strings. und nicht aus einem. der weiss ja nicht dass das eigentlich 1 string sein soll.
  10. hm okay, also musste doch alles einlesen. ich kümmer mich mal später drum ^^ wenn du's dann noch nicht selbst gelöst hast. Hab leider voll den Müll verzapft gerade *g* also in der Textdatei seh ich 3 Datensätze. und ich dachte erst dass 1 Datensatz aus 2 Zeilen besteht. So dass du am ende 6 Zeilen gehabt hättest. Dem war dann aber noch nicht so. Hab ich leider zu spät gesehen. Das einzige Problem, welches die einfachste Löstung leider über den Haufen wirst ist, dass die straße auch aus 2 Strings bestehen kann *brumm*
  11. Nachtrag: Arrrrgh, tut mir leid. Hab gerade gesehen dass ein Datensatz ja garnicht zweizeilig, sondern einzeilig ist. Ich antworte dann später nochmal neu. lasse den alten Text jedoch hier unten stehen Hatte mich total verguckt *g* ------------------------------- Guten Morgen opener, herzlich willkommen in der IT-Branche Dein Problem ist in C recht einfach zu lösen. Es gibt die Möglichkeit des formatierten Einlesens. Die Funktion der stdio dazu heisst fscanf. Wenn du nur die Nummer und den Namen benötigst vereinfachst dies auch noch das Problem. Vorweg solltest du wissen, dass es vielleicht besser ist die Datei nur mit "r" zu öffnen, d.h. nur zum Lesen, da du sie ja nicht verändern willst. fscanf(FILE *stream, const char *format, ...); so würdest du die datei wie folgt einlesen können: fscanf(fp, "%s %s \n", s_KundenData.nummer, s_KundenData.nachname); fscanf(fp, "%c %s %s %d\n", s_KundenData.flag1, &s_KundenData.rabat, s_KundenData.adresse, &s_KundenData.tele); [/PHP] Das würde jetzt die ersten beiden Zeilen einlesen. in einer Schleife könntest du das so fortsetzen, bis zum Ende der Datei. Wenn ich dir nicht helfen konnte, dir das Abbruchkriterium oder das Drumherum fehlt, dann frag nochmal. Viel Spaß beim Coden
  12. wenn du das programm über ein eigenes terminal geöffnet hast, dann schließt sich das, soweit ich weis, automatisch, nachdem du das programm beendet hast. beim xterm war das jedenfalls so. andernfalls ist es ohnehin unsinn, das terminal schließen zu lassen, wenn es nicht durch das programm selbst geöffnet wurde oder es extra für das programm geöffnet wurde.
  13. schau dir das mal an: http://www.gnu.org/software/ncurses/ncurses.html
  14. Dieses PDF hier enthält auch seeeehr viele Informationen. Richtig GUT! http://www.netzmafia.de/skripten/hardware/SerialPort_Programming_c.pdf
  15. bei solchen sachen solltest du es lieber richtig vernünftig machen ... schau dir das mal an: http://sourceforge.net/projects/libserial/
  16. Dieses kleine Programm gibt dir alles als char aus, was auf "/dev/ttyS0" rein kommt. so als kleines Beispiel ... Und wenn das Device richtig konfiguriert ist, dann ergeben die werte sogar Sinn kannst dir auch die Zeichen als als Zahl darstellen lassen, ist vielleicht sinnvoller ... #include <stdio.h> #include <errno.h> #define DEVICE "/dev/ttyS0" int main(int argc, char *argv[]) { FILE *fp; char c; fp = fopen(TERM_DEVICE, "r"); if(fp == NULL) { printf("Error: %s: %s\n", DEVICE, strerror(errno)); return 1; } while(1) { c = fgetc(fp); printf("%c ", c); } fclose(fp); return 0; }
  17. wenn dein device richtig konfiguriert ist, dann kannst du das decvice, z.b. "/dev/ttyS0" wie eine datei öffnen, z.b. mit fopen("/dev/ttyS0","r") angenommen das device ist eine alte com-maus, dann kannst du einfach mit gpm dem maustreiber laden und das device ist richtig konfiguriert. so hab ich das bei meiner "maus-fernbedienung" gemacht. und wenn du dann von dem device liest, dann bekommst du jede menge chars viel spaß damit =) wenn du noch hilfst brauchst, dann kann ich dir auch mal ein stück code zuschicken.
  18. na ja, trotzdem find ich "Anjuta" ganz gut. Viele schwören auch auf Eclipse. na ja, ich code meisstens im xemacs, der hat auch C/C++-Syntaxhighlighting, genau wie vi, bwz. vim.
  19. Wie behandelt man unter Windows die serielle Schnittstelle wie eine Datei? Wo soll ich denn diese "Datei" unter WindowsXP finden? Bei Linux is das ja ganz einfach =) Im moment mach ich das gleiche, aber unter Linux. Würde mich interessieren wie du das unter Windows machst, falls ich mein Programm irgendwann mal portieren möchte.
  20. Ich hab da mal was vorbereitet *g* Gut dass ich meine alten Sourcen aufhebe int main(int argc, char *argv[]) { int i; int iArray[32]; std::cout << "\nBitte eine 32-bit Ganzzahl eingeben: "; std::cin >> iEingabe; for(i = 31; i >= 0; i--) { iArray[i] = iEingabe % 2; iEingabe = iEingabe / 2; } for(i = 0; i <= 31; i++) { std::cout << iArray[i]; } std::cout << endl; return 0; }
  21. Linux-Sockets und Windows-Sockets haben soweit ich weiss kleine unterschiede. Googel mal nach: "Zotteljedis Tipps zur Socket-Programmierung" Ich glaub da stand was dazu. Hab bislang nur mit Linux gearbeitet. Kann also keine eigenen Erfahrung dazu bringen.
  22. Programmieren in C von Kernighan/Ritchie. das ist ANSI C pur Mit dem Buch hab ich C gelernt und benutz es immernoch als Referenz. Das Buch ist einfach geil
  23. sieht ganz gut aus. ich würds wohl auch so ähnlich machen
  24. Hakawamu

    Linuxumsteiger

    Der Junge hat sich für Linux interessiert, nicht für Sportgeräte
  25. also ich konnte damit wunderbar lernen. und es ist auch voll von "beispielen"

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