tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1211
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    hallo alle zusammen,
    also es geht darum:
    ich möchte in eine txt datei, pro zeile, eine zahl mit oder ohne komma,+/-, eintragen z.b:
    2.5
    143.6
    12
    1.6
    -3.1
    diese sollen in meinem programm nun in ein array eingetragen werden..in der form array[0]=2.5,array[1]=143.6 usw.

    dabei kommen mir schon vor der programmierung einige fragen auf:
    1.wie kann ich eine !ganze! zeile immer in ein arrayfeld eintragen, mit vorzeichen...punkt usw.
    2.oder muss man zeichen für zeichen einlesen
    3.muss ich eine typumwandlung vornehmen?und wenn ja wie ****damit z.b. die 2.5 genauso erhalten bleibt wie sie ist, halt nur geschrieben in ein arrayfeld vom typ float

    es wäre echt super wenn mir jemand auf diese fragen antworten könnte, ich hab schon internet komplett durchgesucht...erfolglos
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Willkommen im Forum!

    Also erst einmal würd ich double nehmen, statt float.
    Braucht zwar mehr Speicher, speichert die Zahlen aber genauer.

    Weist du, wie man Dateien öffnet/schließt?
    Ich geh davon aus, sonst sags halt.

    Wenn nur eine Zahl pro Zeile ist, könnte man zB so einlesen:

    fscanf(datei,"%lf",&arr[element]);

    datei ist hier die FILE*
    arr ein double-Array und element eben, in das wievielte Arrayelement die Zahl kommen soll.
    Einfach mitzählen (nach jedem Einlesen eins erhöhen)

    Wenn du element am Anfang auf 0 setzt, könntest du auch gleich ein ++ hinter element schreiben, dann wird es nach jeder eingelesenen Zahl schon automatisch erhöht, ohne einer zusätzlichen Codezeile

    Wenn du doch float statt double nimmst, gehört statt dem %lf nur ein %f

    Gruß
    Geändert von sheel (08.08.10 um 22:38 Uhr) Grund: Rechtschreibung
     

  3. #3
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    hey, echt lieb dass du so schnell geantwortet hast.
    geht das mit fscanf? ich hatte auch diese überlegung, aber ich meine wir haben ja eine txt datei...das würde doch heißen, dass alles was ich da abspeichere wären doch zeichen oder?ich dachte wenn ich dann z.b. "1.27"(in txt ..typ char) in double abspeichere wird in der ascii tabelle für die zeichen '1''2''7' der jeweilige dezimal wert als double in meine double array gespeichert oder lieg ich da voll falsch********ich habe jetzt eine neue überlegung....ich speichere erstmal bis zum zeilenende ('13') alles in ein char array und es gibt doch diese funktion atof() .von stdlib..die meinen string in double umwandelt..das heißt "1.27" wird zu 1.27 umgewandelt und den speichere ich jeweils in einem array feld ab...ich probier das morgen mal aus.


    und noch ne kleine frage....ich speichere die ganze zahlen im editor ab...wie schaffe ich denn eine verbindung zwischen editor und meinem c programm****?ich hab das mal gemacht mit DIR ..kommandozeilen usw...aber ich weiß leider nicht mehr genau wie das gehtich hab noch ein programm von damals , aber ich weiß jetzt gar nicht mehr wie ich das benutze....ich weiß nur noch dass ich bei editor was geschrieben und abgespeichert habe und weiter.................ich hab es vergessen
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von maria1 Beitrag anzeigen
    hey, echt lieb dass du so schnell geantwortet hast.
    geht das mit fscanf? ich hatte auch diese überlegung, aber ich meine wir haben ja eine txt datei...das würde doch heißen, dass alles was ich da abspeichere wären doch zeichen oder?ich dachte wenn ich dann z.b. "1.27"(in txt ..typ char) in double abspeichere wird in der ascii tabelle für die zeichen '1''2''7' der jeweilige dezimal wert als double in meine double array gespeichert oder lieg ich da voll falsch********ich habe jetzt eine neue überlegung....ich speichere erstmal bis zum zeilenende ('13') alles in ein char array und es gibt doch diese funktion atof() .von stdlib..die meinen string in double umwandelt..das heißt "1.27" wird zu 1.27 umgewandelt und den speichere ich jeweils in einem array feld ab...ich probier das morgen mal aus.
    Bei scanf bzw. fscanf kann man mit den %...-Angaben bestimmen, wie etwas eingelesen werden soll.
    Für die Sache mit ASCII-Werten ist %c hilfreich, mit %lf erkennt die Funktion aber auch problemlos doubles, obwohl sie als einzelne Buchstaben vorliegen.

    Das mit dem Zeile einlesen und atof geht natürlich auch.
    Du musst aber nicht jedes Byte einzeln ins Array lesen (falls du das vorgehabt hast), da könnte man zB. fgets nehmen. Das liest immer genau eine Zeile ein und speichert die ohne weitere Aktionen in ein Array.


    Zitat Zitat von maria1 Beitrag anzeigen
    und noch ne kleine frage....ich speichere die ganze zahlen im editor ab...wie schaffe ich denn eine verbindung zwischen editor und meinem c programm****?ich hab das mal gemacht mit DIR ..kommandozeilen usw...aber ich weiß leider nicht mehr genau wie das gehtich hab noch ein programm von damals , aber ich weiß jetzt gar nicht mehr wie ich das benutze....ich weiß nur noch dass ich bei editor was geschrieben und abgespeichert habe und weiter.................ich hab es vergessen
    Ich hab leider keine Ahnung, was du vorhast. Erklär das bitte genauer.
     

  5. #5
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    also die zahlen die ich eintippe und einlesen möchte muss ich doch als datei abspeichern...z.b unter zahlen.txt....das mach ich z.B.im programm "editor".jetzt schreibe ich mein programm in c ...usw. fopen("zahlen.txt","r")....woher weiß mein geschrieber code denn jetzt, in welchem proramm die datei gespeichert ist...damit meine ich word,editor usw. das muss ich doch meinem programm irgenwie mitteilen oder, also dass er meine datei "zahlen.txt" bei editor suchen soll und nicht bei word!verstehst du mein problem?

    und damals hatte ich mal eine hausübung gemacht ...ich habe ein programm geschrieben zum zugriff auf die gespeicherte datei!und da musste man irgenwie nicht nuuuuuuur das c programm starten sonder musste im Hintergrund noch auf start->ausführen->cmd...cd... und weiter weis ich nicht mehr...aber ich weiß dass es dazu da war um meinem c programmmitzuteilen wo er nach der abgespeicherten datei suchen muss .
    und das c programm fing so an..................int main(int argc, char *argv[]) .......................das ist schon soooooooooo lange her ichhabe alles vergessen
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von maria1 Beitrag anzeigen
    und damals hatte ich mal eine hausübung gemacht ...ich habe ein programm geschrieben zum zugriff auf die gespeicherte datei!und da musste man irgenwie nicht nuuuuuuur das c programm starten sonder musste im Hintergrund noch auf start->ausführen->cmd...cd... und weiter weis ich nicht mehr...aber ich weiß dass es dazu da war um meinem c programmmitzuteilen wo er nach der abgespeicherten datei suchen muss .
    und das c programm fing so an..................int main(int argc, char *argv[]) .......................das ist schon soooooooooo lange her ichhabe alles vergessen
    Alles klar.
    Also: Wenn du ein Programm aus der Konsole (cmd) startest; brauchst du als erstes den besagten Befehl "cd", um der Konsole "mitzuteilen", in welchem Ordner du das Programm gespeichert hast.

    Welcher Ordner aktuell gerade eingestellt ist, sieht man sowieso in der Konsole.
    zB bist du am Anfang in C:\Programme
    Dein Programm ist aber in C:\Programme\MeinProg
    dann schreibst du: "cd Mein Prog" (ohne Anführungszeichen), um in den Ordner zu wechseln.

    Bei Bedarf kann man mit "cd .." wieder Ordner "aufwärts" gehen, also von
    C:\Programme\MeinProg wieder zu C:\Programme
    Mit einem zweiten Mal zu C:\
    "cd Anderes" würde jetzt zu C:\Anderes gehen...usw

    Wenn du dann im passenden Ordner bist, kannst du mit dem Programmnamen das Programm einfach starten. Also wenn die Programmdatei "Prog1" heißt, gibt man "Prog1" oder "Prog1.exe" ein.
    Das wäre das gleiche wie ein Doppelklick drauf (außerhalb der Konsole).

    In der Konsole kannst du aber zusätzlich noch Parameter mitgeben. Wenn man zB
    Prog1 hallo 608
    eingibt, kann man dem Programm gleich beim Start auf die Weise eingaben mitgeben, ohne das die erst über scanf etc abgefragt werden müssen.

    Dafür ist dann das argc und argv beim main:
    Im int argc steht die Anzahl der Parameter (hallo und 608)
    In dem Fall wären es zwei, der Programmname Prog1 zählt aber auch noch dazu, also drei.

    In argv sind dann die Parameter als Strings/char-Arrays
    argv[0] hat "Prog1"
    argv[1] hat "hallo"
    und argv[2] hat "608" (Achtung: Als char-Array, für die Zahl müsste man atoi/atof verwenden
    Kennst du eh schon)


    ...Rest folgt gleich
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Zitat Zitat von maria1 Beitrag anzeigen
    also die zahlen die ich eintippe und einlesen möchte muss ich doch als datei abspeichern...z.b unter zahlen.txt....das mach ich z.B.im programm "editor".jetzt schreibe ich mein programm in c ...usw. fopen("zahlen.txt","r")....woher weiß mein geschrieber code denn jetzt, in welchem proramm die datei gespeichert ist...damit meine ich word,editor usw. das muss ich doch meinem programm irgenwie mitteilen oder, also dass er meine datei "zahlen.txt" bei editor suchen soll und nicht bei word!verstehst du mein problem?
    Editor+C-Programm gibt kein Problem, weil:

    Der Editor ist eines der wenigen Programme, die Dateien auch wirklich so anzeigen und abspeichern, wie sie auf der Festplatte sind und wie sie auch von fopen, fscanf (und was noch so dazugehört) hergenommen werden.

    Word hält sich leider nicht daran.
    Man merkt davon zwar nichts, wenn man im Word was schreibt, aber es ist gründlich anders als das, was beim Speichern wirklich auf die Platte kommt.

    Hier ein Byte, ob die Schrift kursiv ist, da ein int mit der Schriftgröße, den Schriftnamen, dann vielleicht wieder ein paar Wörter vom wirklichen Text...
    Alles in allem ein heilloses Kauderwelsch (zumindest wenn es ein Mensch lesen probiert)
    Öffne eine doc-Datei im Editor, dann weist du, was ich meine.

    Word kann seine eigenen Dateien natürlich verstehen, wenn man sie wieder öffnet.
    Das Programm weiß, welcher Byte jetzt welchen Sinn hat.

    Ist bei deinem Programm aber leider nicht der Fall.
    Würdest du eine doc-Datei öffnen und einlesen, könntest du bei jedem Byte raten, ob er zum "richtigen" Text gehört oder irgendwas anderes ist.

    Wenn man wüsste, das (nur ein Beispiel) immer
    1)erstes ein Byte mit 1 oder 0 kommt, ob der Text unterstrichen ist
    2)Dann ein int mit der Anzahl der Buchstaben
    3)Und dann die Buchstaben selber
    würde es ja noch gehen, so zu Programmieren, dass das eigene Programm sowas erkennt und sich nur den richtigen Text holt.

    Bei den ganzen unzählbaren Möglichkeiten, die Word zur Textgestaltung anbietet, und einer nicht wirklich vorhandenen Erklärung von Microsoft dazu ist das aber ziemlich aussichtslos (oder Monate/Jahre-lange Arbeit)

    Um deine Frage also zu beantworten: Du brauchst nirgends einstellen, von welchem Programm die Datei stammt.
    Die verwendeten Funktionen holen sich die Daten, wie sie auf der Platte liegen.
    Der Editor speichert auch so ab, Word nicht.

    Bleib beim Editor.
    Geändert von sheel (09.08.10 um 00:06 Uhr)
     

  8. #8
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    vielen dank für deine mühe und du erklärst echt gutich würde nur noch gerne wissen, ob ich !int! main(argv,...){} weglassen kann ********also ich würde.... !void! main (void){mein ganzes programm hier rein schreiben...fopen etc }...in editor gehen und meine ganzen werte reinschreiben und unter zahlen.txt abspeichern....und in meinem programm gebe ich ein: "..fopen("zahlen.txt","r")" etc...greift mein programm dann automatisch oder muss ich das programm aus der konsole starten****?(das programm soll sich die zahlen holen und dann nach wunsch... durch veschiedene sortierverfahren sortiert werden)
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Natürlich kannst du es einfach so machen.
    Einfach das Ganze mit dem argc, argv und dem Konsolen aufmachen weglassen.
    Und das Programm mit einem Doppelklick starten.

    Nur: WENN du in der Konsole Werte mitgeben möchtest, muss die argc/argv-Geschichte mitprogrammiert sein. Sonst werden die Werte einfach ignoriert.

    Gruß

    PS: Achte vielleicht etwas mehr auf deine Rechtschreibung, bevor sich ein Mod aufregt
    http://www.tutorials.de/content/166-netiquette.html Punkt 15
     

  10. #10
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    hey also vielen vielen dank für deine hilfe...ich glaube jetzt sehe ich wieder etwas hoffnung für mein programm...also ich werde die nächsten tage das programm fertig machen und wäre super wenn du mir...falls noch fragen entstehen sollten... helfen könntest

    viele grüße

    PS: wenn du wüsstest wie mein kopf schon raucht(sitze hier an dem problem seit heute morgen), dann würdest du verstehen wiso ich jetzt keine nerven für rechtschreibung habeaber wir konnten uns ja verständigen und du hast mir geholfen
     

  11. #11
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    hallo,
    also ich habe mein programm jetzt begonnen....... und bin leider auf das problem gestoßen...was ich befürchtet hatteich habe eine funktion ...die überprüft,ob meine datei(die ich im hauptprogramm eingebe) existiert oder nicht. ich schreibe zahlen im programm" editor" und speichere sie irgendwo ab z.b. unter "zahlen.txt". und schließe editor...und dann compiliere ich mein programm und gebe im hauptprogramm als dateiname "zahlen.txt" an. und dann schreibt er auf dem bildschirm"datei existiert nicht", obwohl dir datei doch vorhanden ist...ich denke dass mein quellcode richtig geschrieben ist....der springt ja in die funktion rein...aber er findet die datei nicht.....was mache ich denn falsch?vielleicht bei der abspeicherung von der datei im editor?muss die datei unter einem bestimmten ordner abgespeichert sein? .....

    wäre echt super,wenn mir da jemand helfen würde....
     

  12. #12
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Wenn du keinen fad dazuschreibst, muss die Datei im gleichen Ordner sein wie das Programm.

    Sonst: Welchen Compiler/DE benutzt du?
    Wie startest du das Progamm (Konsole, Doppelklick, aus der Entwicklungsumgebung)?

    Noch eine häufige Fehlerursache: Windows kürzt das ".txt" der Dateinamen (im Explorer) gern weg und zeigt dafür halt ein Symbol, an dem man den Dateityp erkennt.
    Wenn wirklich "zahlen.txt" angezeigt wird, wenn das ganze einmal einfach in "zahlen" um.
    Wenn das Textdateiensymbol bleibt, wars das.
     

  13. #13
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    danke für deine antwort
    ja du hattest recht ich musste zahlen.txt datei im selben ordner haben wie das programm...jetzt geht es auchich habe aber mein programm noch etwas veändert ,so dass ich über die konsole gleich den dateinamen"zahlen.txt" als parameter an mein int main(argv etc) übergebe.
    welchen pfad muss ich denn eingeben , dass mein programm über die konsole gestartet wird und ich gleich den dateinamen als parameter mit übergeben kann?
    also zahlen.txt steht jetzt im ordner des programmes visual studio...also c\benutzer\documents\visual studio usw.!mein geschriebenes programm steht unter c\test\studienarbeit ....was müsste ich in der konsole alles eigeben ,damit er macht was er soll****?

    ganz liebe grüße
     

  14. #14
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Code :
    1
    2
    
    cd c:\test\studienarbeit
    programm "c\benutzer\documents\visual studio\zahlen.txt"

    Die Anführungszeichen braucht man, wenn Leerzeichen im Pfad sind, damit alles zusammen genommen wird.
    Sonst wäre bis zum visual ein argv-teil, ab studio der nächste
     

  15. #15
    maria1 maria1 ist offline Mitglied Silber
    Registriert seit
    Aug 2010
    Beiträge
    51
    hey dankeschön
    also bin jetzt fertig mit meinem programm ...und es läuft so wie ich es haben wollte.will es jetzt nur noch verfeinern...und habe dazu noch eine frage.wenn meine sortierten zahlen(double) ausgegeben werden,steht z.b. 1.200000000000000000...wie bekomme ich denn die nullen weg?gibt es da irgendeine einstellung?
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 03.08.07, 15:24
  2. Antworten: 4
    Letzter Beitrag: 27.04.07, 13:07
  3. Summe der Zahlen aus dem Array
    Von son gohan im Forum PHP
    Antworten: 4
    Letzter Beitrag: 20.08.06, 23:10
  4. Zahlen eintragen
    Von GoldenEye im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 03.08.06, 11:18
  5. Array in Datenbank eintragen klappt nicht
    Von Phaseshifter im Forum PHP
    Antworten: 4
    Letzter Beitrag: 24.06.04, 16:41

Stichworte