Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

11

16.07.2009, 16:14

Du rufst bei jedem Programmstart: FrageZahlAb() auf. Das ist also völlig normal, dass er dich das jedes Mal fragt.

Nebulak

Frischling

Beiträge: 9

Wohnort: Karlsruhe

Beruf: Brennschneider

  • Private Nachricht senden

12

16.07.2009, 16:54

Ich hab es so gemacht, vielleicht wirst du aus dem Code schlau =)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <fstream>

using namespace std;

#define FILEPATH "Test.txt"

void main(void)
{
    // Checke ob die Datei existiert!


    fstream File(FILEPATH, ios_base::in | ios_base::binary);

    if(File.good() == false) // Datei existiert nicht!

    {
        File.clear();
        File.open(FILEPATH, ios_base::out | ios_base::binary);

        int Zahl = 0;

        cout << "Bitte geben sie eine Zahl ein : ";
        cin >> Zahl;

        File.write((char*)&Zahl, sizeof(Zahl));

        File.close();
    }
    else // Datei existiert!

    {
        int Zahl = 0;

        File.read((char*)&Zahl, sizeof(Zahl));

        cout << "Datei gelesen - Zahl : " << Zahl << endl;

        File.close();
    }
}
mfg Nebulak

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

13

16.07.2009, 19:51

Zitat von »"Nexus"«

Zitat von »"koschka"«

Deswegen sonnte man auch alle Zeiger mit ZeroMemory leeren, bevor man sie benutzt
Nein, sollte man nicht, schon gar nicht mit einer plattformabhängigen Funktion (bzw. Makro). Einen Sinn hat das Nullsetzen eines Zeigers nur, wenn dieser explizit als ungültig dargestellt werden soll und man lesend darauf zugreift. Wenn man ihn im nächsten Zug gleich überschreibt oder er den Scope verlässt, ist das unnötig.

Aber so oft sollte man in C++ eigentlich nicht mit rohen Zeigern hantieren, dass man sich deswegen dauernd Gedanken machen muss.


Ich meinte mit "benutzen" nicht zuweisen ;). Danke aber für diese Klarstellung.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

14

16.07.2009, 20:25

Hi
@Nebulak
Ja das funktioniert :D
Ja ich glaube das versteh ich!


So jetzt habe ich mal das mit der Funktion FrageZahlAb, in meinem Beispiel gändert.
code:

C-/C++-Quelltext

1
2
3
4
5
6
// Hier wurde der Aufruf der Funktion weggelassen

    ifstream Input ("Zahl.zhl", ios::binary);
    Input.read ((char *) &Zahl, sizeof (Zahl));
    //Zahl aus Input anzeigen

    cout << "Zahl: " << Zahl << endl;
    Input.close();

(Ausschnitt) Jetzt bekomme ich den Fehler das er den Bezeichner "Zahl" nicht findet und das viermal bzw.:

Quellcode

1
2
3
4
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test12\test12\test12.cpp(26) : error C2065: 'Zahl': nichtdeklarierter Bezeichner
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test12\test12\test12.cpp(26) : error C2065: 'Zahl': nichtdeklarierter Bezeichner
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test12\test12\test12.cpp(26) : error C2070: ''unknown-type'': Ungültiger sizeof-Operand
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test12\test12\test12.cpp(28) : error C2065: 'Zahl': nichtdeklarierter Bezeichner


Ich lese ihn doch aus der Datei aus.

Danke im Voraus :D
Pi mal Daumen = 18.84955592

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

15

16.07.2009, 20:27

Dir fehlt sowas wie

Quellcode

1
int zahl;


vor deinem ersten Codeblock - in deiner Funktion. Du liest den Wert aus der Datei aus und speicherst ihn in der Variablen Zahl.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

16

16.07.2009, 20:38

Hmm...
Wie lese ich denn den Wert aus einer Datei so aus, dass ich ihn in einer Variable speichern kann. :?

Ich habe das mal so versucht:

C-/C++-Quelltext

1
    Zahl = Input;

Was wohl ziemlich falsch ist. Ich bekomme den Fehler:

Quellcode

1
c:\dokumente und einstellungen\administrator\eigene dateien\programmieren\programme_i\test12\test12\test12.cpp(28) : error C2440: '=': 'std::ifstream' kann nicht in 'int' konvertiert werden

Warscheinlich weil Input ein char ist.
Pi mal Daumen = 18.84955592

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

17

16.07.2009, 20:45

Zitat von »"FLO2"«

Warscheinlich weil Input ein char ist.


Nein, steht doch im Fehler, std::ifstream kann nicht in int konvertiert werden, Input ist ein ifstream.

Edit:

Ich würds so machen:

C-/C++-Quelltext

1
2
3
4
int i;
ifstream Input("Datei.dat", ios::binary);
Input.read((char*) &i, sizeof(i));
Input.close();
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

18

16.07.2009, 21:14

Danke :D :D
Es hat geklappt.
Pi mal Daumen = 18.84955592

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

19

16.07.2009, 21:18

Bitteschön 8) :lol:
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

20

16.07.2009, 21:25

Sehr unsauber gelöst!

Viel besser:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// read a file into memory

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  int length;
  int a;
  char * buffer;

  ifstream is;
  is.open ("test.txt", ios::binary );

  // get length of file:

  is.seekg (0, ios::end);
  length = is.tellg();
  is.seekg (0, ios::beg);

  // allocate memory:

  buffer = new char [length];

  // read data as a block:

  is.read (buffer,length);

  // convert the buffer into a number

  a = atoi (buffer );

  is.close();

  cout.write (buffer,length);

  delete[] buffer;
  return 0;
}


Referenzen:
o http://www.cplusplus.com/reference/iostream/istream/read/
o http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

Übrigens nach 5 Sekunden Suche.

Werbeanzeige