zahlen aus datei, in array eintragen (in programmiersprache c)

maria1

Mitglied
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:(
 
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ß
 
Zuletzt bearbeitet:
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 geht:(ich 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:(
 
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.


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 geht:(ich 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:(

:confused: Ich hab leider keine Ahnung, was du vorhast. Erklär das bitte genauer.
 
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:(
 
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
 
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.
 
Zuletzt bearbeitet:
vielen dank für deine mühe und du erklärst echt gut:)ich 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)
 
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
 
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 habe;)aber wir konnten uns ja verständigen und du hast mir geholfen :)
 

Neue Beiträge

Zurück