# Benutzung von fwrite



## DaMan (24. Mai 2005)

Moin Leute!

Ich bin noch relativ neu auf dem C++ gebiet aber jeder hat ja mal klein angefangen 

Also mein Problem:

Ich habe ein main funktion der einer Write Funktion 3 werte übergibt.
Die write funktion öffnet das file.
Wie bekomme ich die 3 werte in das file geschrieben, dass ich später durch eingabe einer der 3 werte die anderen beiden werte aus der datei auslesen kann?

Bsp.:
Bankprogramm

Ein Benutzer wird mit UserID, PIN und Kontostand in mein File geschrieben

Ich möchte auf so ein Geldabheb-Gerät folgendes einrichten:
Benutzer gibt seine ID ein... daraufhin muss das programm die dazugehörige pin aus dem file auslesen und danach überprüfen ob der benutzer den richtigen pin eingegeben hat.
wenn das der fall is, soll er die möglichkeit haben kontostand zu betrachten,
Geld abzuheben oder Geld einzuzahlen.
Wenn er Geld einzahlt oder abhebt muss der alte kontostand in dem file natürlich mit dem neuen überschrieben werden und die datei wieder abgespeichert werden.

Ich bekomme das ja alles schon hin wenn ich UserID und PIN im programmtext angebe, der kontostand wird schon in nem file gespeichert. Aber ich weiß nicht wie ich alles 3 in das file bekomme und das dann jeweils der richtige pin und der richtige kontostand zur passenden ID ausgelesen wird.

Ich hoffe jemand kann mir helfen 

DaMan


----------



## jokey2 (24. Mai 2005)

Die Frage gab's hier schon öfter, also


----------



## DaMan (24. Mai 2005)

Hmmm,

also ich find nix das ich benutzen kann um mein problem zu lösen 

Hast vllt nen Lnk für mich zum richtige Thema.. weiß net so wirklich wonach ich suchen soll

DaMan


----------



## Tobias K. (24. Mai 2005)

moin


Was meinst du eigentlich damit das die write Funktion die Datei öffnet?


mfg
umbrasaxum


----------



## Tobias K. (24. Mai 2005)

moin


Hier ein Beispiel zu fwrite aus der MSDN:

```
#include <stdio.h>

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   /* Open file in text mode: */
   if( (stream = fopen( "fread.out", "w+t" )) != NULL )
   {
      for ( i = 0; i < 25; i++ )
         list[i] = (char)('z' - i);
      /* Write 25 characters to stream */
      numwritten = fwrite( list, sizeof( char ), 25, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

   }
   else
      printf( "Problem opening the file\n" );

   if( (stream = fopen( "fread.out", "r+t" )) != NULL )
   {
      /* Attempt to read in 25 characters */
      numread = fread( list, sizeof( char ), 25, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.25s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}
```


mfg
umbrasaxum


----------



## DaMan (24. Mai 2005)

Naja, bevor die funktion in die datie schreiben kann muss sie sie ja öffnen


> FILE *f;
> f=fopen("e:\\Ordner\\datei.dat","wb");



Mein Problem ist ja das ich nicht weiß wie ich die 3 werte schreiben / lesen muss
damit ich sie nachher zusammen verwenden kann.

z.b. reinschreiben
userid = 123
pass = 444
konto=1400

wenn ich dann der read funtktion userid(also 123) übergebe
will ich da reinschreiben können
return(pass);
und dann soll er mir die 444 returnen.


----------



## CrazyHornet (24. Mai 2005)

Hier mal ein ganz simples Beispiel keine Ahnung ob dir das eventuell weiterhilft:


```
FILE* datei = fopen("datei.dat", "w"); //Datei öffnen/erstellen mit Schreibberechtigung
char * wht; //String "Variable" festlegen
sprintf( wht, "%d,%d,%d\n", wert1,wert2,wert3);// die 3Werte werden in eine Zeile eingetragen;neuer Eintrag,neue Zeile
fwrite(wht, sizeof(char), strlen(wht)+1, datei); //Schreiben des Strings in die Datei
fclose(datei); // Schließen der Datei.
```


----------



## Tobias K. (24. Mai 2005)

moin


Ich hab doch oben schon ein Beispiel gegeben.

Ich verstehe nciht ganz wo das Problem liegt.
Gehts dir nciht so sehr um das reinschreiben sondern darum das dir die passenden Werte rausgesucht werden?!


mfg
umbrasaxum


----------



## CrazyHornet (24. Mai 2005)

Hab das nicht gesehen   wollts schon 5Min davor schreiben aber musste dann kurz weg vom PC Zivileben halt  

Zu der Verarbeitung der Daten: 
Eventuell wird das Thema hier so diskutiert wie du es haben willst:
http://www.tutorials.de/tutorials205994.html


----------



## DaMan (24. Mai 2005)

Mhh ja das geht schon alles in die Richtige richtung, aber net so wie ichs brauche  

Ich möchte wissen wie ich die werte in die datei schreiben muss damit ich nachher beim wieder auslesen alle werte wieder bekomme

Write:
user: 123    pin: 4444     konto:1000

Read übergebe ich die 123
und bei
return(pin)
soll Read mit 4444 rausgeben
und bei
return(konto)
soll Read mit 1000 rausgeben 

Ich hoffe es ist einigermaßen verständlich


----------



## Tobias K. (24. Mai 2005)

moin


Ich denke fprintf und fscanf sind eher das was du suchst!


mfg
umbrasaxum


----------



## CrazyHornet (24. Mai 2005)

Oder du machst es so wie bei meinem Code-Beispiel geschrieben

nur schreibst du

sprintf( wht, "User: %d Pin: %d Konto: %d \n", wert1,wert2,wert3);

damit Hast du ne text-datei die folgendermaßen aufgebaut ist:

User: 1 Pin: 1234 Konto: 12
User: 2 Pin: 4321 Konto: 21
....

Dann müsstest du nur nach dem String
"User: 1" suchen und dann kannst du die gesamte Zeile auslesen so wie es unter dem oben genannten Link erwähnt wird bzw. auf weiterführende Themen verwiesen wird


----------



## Tobias K. (24. Mai 2005)

moin

Zum auslesen

```
int main(int argc, char* argv[])
{
	FILE *datei = fopen("test.txt", "r");

	int id;
	int pin;
	int konto;

	fscanf(datei, "%d %d %d\n", &id, &pin, &konto);
	
	printf("ID: %d Pin: %d Konto: %d", id, pin, konto);

	fclose(datei);

	return 0;
}
```
Zum reinschreiben

```
int main(int argc, char* argv[])
{
	FILE *datei = fopen("test.txt", "w");

	int id = 123;
	int pin = 1234;
	int konto = 1000;

	fprintf(datei, "%d %d %d\n", id, pin, konto);

	fclose(datei);

	return 0;
}
```

Wenn du es noch einfacher willst, musst du ne .ini Datei verwenden.
Edit: Wnen ich es mir richtig überlege kommst du um ne .ini Datei nciht drum rum, wenn du es so einfach haben willst. Ansonsten müsstest du immer die ganze Datei durchsuchen.


mfg
umbrasaxum


----------



## DaMan (24. Mai 2005)

Hi!

Das sieht schon sehr gut aus 

bin jetzt erstmal mittagessen und danach teste ich das mal aus

danke euch schon mal sehr


----------

