[C++] Hilfe mit fwrite *erledigt*

Odog-gfx

im Urlaub :) :) :)
ID: 186179
L
29 April 2006
281
7
Hi!
Ich schreib mir grad ein kleines Programm um meine Aufträge zu verwalten.
Dabei möchte ich den eingegebenen Preis abspeichern.
Das Problem besteht darin, dass er in die angelegte Textdatei nur Müll reinschreibt wie %#W@ anstatt den Preis.

Hier mal die Funktion die das bewerkstelligen soll

Code:
FILE *daten;
dataten = fopen("preis.txt","wt");

//design.preis[z] ist das Struct das den Preis beinhaltet

fwrite(&design.preis[z],sizeof(design.preis[z]),1,daten);
fclose(daten);

Ich find den Fehler einfach net :(
 
Zuletzt bearbeitet:
Syntax für Thread-Titel einhalten, passenden Titel formulieren
Keine "???" oder "!!!" im Titel.
:naughty:

@Topic:
Hier ist ein Fehler:
Das Handle in fopen() stimmt nicht, es muss daten heißen.

Der Ausgabe nach könnte das Programm durchaus korrekt arbeiten (beim Posten mit dem Handle vertippt ?) :)
Poste mal die struct, damit ich sehe, ob ich Recht hab ;)
 
ok titel mal geändert ;D

hier mal das ganze proggie, is noch nicht viel ;)
für'n paar funktionen (textbackground...) brauchst du die conioex.h,
das ist aber nicht die fehlerquelle ;)

//edit jo hab mich da nur verschrieben ^^

PHP:
// Autor: Christian Schade

#include "stdafx.h"
#include <iostream>
#include "conioex.h"
#include <conio.h>
#include <string.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char wahl;
int z = -1;

// Struct den ich benütz
struct des
{
int art[100];
char beschreibung[100][100];
char verkauf[100][20];
double preis[100];
}design;
z++;

do
    {
    textbackground(LIGHTBLUE);
    clrscr();
    textcolor(WHITE);

    cout << "\n\n\n\t\t\t\tAUFTRAGSVERWALTER";
    cout << "\n\n\t\t1: Auftragswahl";
    cout << "\n\n\t\t2: Beschreibung eingeben";
    cout << "\n\n\t\t3: Beschreibung Ausgabe";
    cout << "\n\n\t\t3: Preis speichern";
    cout << "\n\n\t\t#: Ende";

    cout << "\n\n\t\tWahl >> ";
    cin  >> wahl;

    switch(wahl)
        {
        // Auftragswahl
        case '1': clrscr();
        cout << "\n\n\n\t\t\t\t auftragswahl";
        cout << "\n\n\t\t1: Webdesign";
        cout << "\n\n\t\t2: Banner";
        cout << "\n\n\t\t3: Slot";
        cout << "\n\n\t\t4: Sonstiges";
        cout << "\n\n\t\tWahl >> "; 
        cin  >> design.art[z];
        break;

        // Beschreibung eingeben
        case '2': clrscr();
        cout << "\n\n\n\t\t\t\t beschreibung eingeben";

        cout << "\n\n\t\t1: Beschreibung: ";
        cin  >> design.beschreibung[z];
        cout << "\n\n\t\t2: Preis: ";
        cin  >> design.preis[z];
        cout << "\n\n\t\t3: Verkauft an: ";
        cin  >> design.verkauf[z];
        break;
        // Beschreibung Ausgabe
        case '3':clrscr();
        cout << "\n\n\n\t\t\t\t beschreibung Ausgabe";
        
        // Art des Webdesigns
        cout << "\n\n\tArt: ";
        
        switch(design.art[z])
            {
            case 1: cout << "Webdesign";break;
            case 2: cout << "Banner";break;
            case 3: cout << "Slot";break;
            case 4: cout << "Sonstiges";break;
            }

        cout << "\n\tBeschreibung: " << design.beschreibung[z];
        cout << "\n\tVerkauft an: " << design.verkauf[z];
        cout << "\n\tPreis: " << design.preis[z];
        getch();break;


        // Preis speichern
        case '4':
            
        FILE *daten; 
        daten = fopen("preis.txt","wt"); 
        //design.preis[z] ist das Struct das den Preis beinhaltet 
        fwrite(&design.preis[z],sizeof(design.preis[z]),1,daten); 
        fclose(daten);
        break;


        case '#': break;
        default: cout << "FEHLER!";

        }
    }
while (wahl != '#');
    


    return 0;
}
 
Zuletzt bearbeitet:
Es stimmt schon alles ;) Du kannst dir aber das "wt" sparen, weil die Daten eh keiner lesen kann. Das ist auch der "Fehler", der keiner is.

Du speicherst einen double-Wert in eine Datei. Is klar, dass du den ned lassen kannst :mrgreen:
Wenn du ihn lesbar speichern willst, benutz fprintf(). Ich wäre damit aber vorsichtig, weil es Probleme beim wiedereinlesen geben kann.
PHP:
FILE* fp=fopen("preis.txt","wt");
fprintf(fp,"%4.2lf",design.preis[z]);
fclose(fp);
 
oh verflucht und ich hab die ganze zeit den fehler im restlichen programm (besonders den structs) gesucht und jetzt krieg ich mit dass in der txt überhaupt nicht 1:1 gespeichert wird :D

nach der erkenntniss hab ich das laden gleich auch mit eingebaut und funktioniert wunderbar :)

danke ;D
 
öhm wo hier schon theHacker im thread is,
habe eben ne komische meldung in windows bekommen..is da wer in mein system eingebrochen ?

 
Keine Panik, das is bloß WinAmp :mrgreen: Weiß auch ned, wo da der Fehler is. Is irgendwas in der Visualisierung :think:
 
boah, war schon dabei das netzwerkkabel rauzuziehen :ugly:
wenn mir winamp noch mal son schrecken einjagt isses runter von der platte :evil:

danke,
odog