[C++] Zahlen in Datei einlesen

elq

Cadet 1st Year
Registriert
Jan. 2005
Beiträge
11
hallo :)
bin noch programmier beginner und habe eine Aufgabe zu lösen.

Code:
#include <stdio.h>
#include <iostream.h>
#include <string.h>

void main ()
{
	FILE *datei1;
	char Dname[20];
	int i;
	int a;


	cout << "Geben sie den Dateinamen ein: " << endl;
	cin >> Dname;
	
	strcat(Dname,".txt");
	
	datei1= fopen(Dname,"w"); 

	for (i=1; i < 101; i++)
		
	{
		
		a=i;
		printf ("%i\n", a);
		fwrite(&a, sizeof(a), 1, datei1);
		
	}

}

Mein Problem, es wird in die Datei das hier eingelesen :
       

                  ! " # $ %
' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C
D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d

Es sollen aber die Zahlen 1-100 in der Datei stehen, wisst ihr was ich falsch mache?
Die Zahlen 1-100 werden allerdings in der kommandozeile ausgegeben, nur eben nicht in die Datei geschrieben.

Danke im vorraus, elq :rolleyes:
 
Willkommen bei Forumbase. :)
Es liegt daran, dass du die Zahlen binär in die Datei schreibst. Sie werden aber korrekt geschrieben. Ein Editor wandelt die binär geschriebenen Zahlen allerdings wieder zurück in ASCII-Zeichen.
Was du willst, ist dass die Zahlen als Text in die Datei geschrieben werden, oder? Schau dir mal die Doku zu fprintf an. ;)
 
Danke, werde sicher noch einige Fragen hier stellen :D

achsoooo :lol:.
Nein wollte schon das das integer bleiben, weil das Teil der Aufgabenstellung war.
Gut werd mich dann jetzt mit fprintf beschäftigen.

Danke erst einmal für die schnelle Hilfe :)

greets elq
 
also du meinst, nicht binär in die Datei sondern als char, ja?
Wenn ich es binär in die Datei schreibe, kann ich es dann bei der Ausgabe(dazu komme ich in einem neuen Thread :( ) nicht mit der Formatierung ""%d",variable" als Zahl bzw. mit %c also char ausgeben lassen?

greets elq
 
Mmh willst Du C oder C++ lernen? Wenn Du dich für C++ entschieden hast, würde ich die Finger von printf & Co lassen. Nutz lieber die Stream-Bibliothek. Ist um einiges leichter zu benutzen, du brauchst nicht so viel Hintergrundwissen (für den Anfang) und es ist typsicherer.

Code:
#include <iostream>
#include <string>

using namespace std;

int main ()
{
	string filename;
	cout << "Geben sie den Dateinamen ein: " << endl;
	cin >> filename;

	ofstream fout (filename.c_str());
	for (int i=1; i<=100; ++i) {
		fout << i << endl;
	}
	return 0;
}

Der Code ist ungetestet, sollte aber so laufen. In deinem Programm befindet sich noch ein dicker Buffer-Overflow, wenn man einen Dateinamen länger als 17 Zeichen eingibt.
 
Zuletzt bearbeitet:
Ja lerne C/C++, Aufgabenstellung war es, das mit fwrite,fopen, zu lösen, wohl um die funtionelle Grundlage zu verstehen, nehme ich an.

Woher kommt der Buffer Overflow bei mehr als 17 Zeichen? Hab doch char [20] ?

Danke für Dein programm, denke iostream wird auch bald dran kommen richtig ;)

greets elq
 
Wenn Du 16 Zeichen eingibst, fügst Du mit strcat noch 4 Zeichen an (".txt"). Damit bist Du bei 20, der Größe deines Buffers. Alles was länger ist, schreibt gnadenlos in Speicher, der nicht mehr dem Buffer gehört. Und ein Dateiname wie z.B. "C:\Programme\DevCpp\test\meineTestDatei.txt" ist wirklich nicht unüblich.
 
oah da hast du recht. hab ich gar nicht beachtet.
Danke für den tip
 
oha , Dankeschön :freaky:
 
Zurück
Oben