Mit int choice = 0; geht es, danke
Werde das noch mit alternativen zu fflush irgendwann testen, aber da fehlt mir noch etwas das Wissen zu um diese zu verstehen.
Danke vielmals für die Ratschläge!
Moin,
Ich arbeite mit Dev-CPP (GUI für MinGW), um meine Programme auf Windows zu portieren. Dabei habe ich folgendes Problem: Eine meiner Bibliotheksfunktionen schreibt irgendwie nicht in die Datei. Stark vereinfacht sieht der Code so aus:
#include <cstdlib>
#include <cstdio>
int main(void)
{
const char right[]="z";
FILE* optfp = fopen("test.txt", "r+b");
if(optfp == NULL) {
puts("optfp was NULL!");
exit(1);
}
char c;
do { c = fgetc(optfp); } while ( c != '=' );
fputs(right, optfp);
fclose(optfp);
}
Dabei sieht die Datei "test.txt" wie folgt aus:
a=b
c=d
Die Textdatei ist im Linux Textformat, deshalb der Modus "b" beim Öffnen. Ziel des einfachen Programms ist es, "a=b" zu "a=z" zu verändern. Die do-while-Schleife sollte dabei einfach nur so viele Bytes einlesen, bis ein "=" gelesen wird, danach das "z" schreiben. Das Lesen funktioniert dabei auch tadellos, bloss geht das Schreiben danach nicht!
Wenn ich die do-while-Schleife durch folgende Zeile ersetze, funktioniert das Programm:
fseek(optfp, 2, SEEK_CUR);
Das ist aber keine Dauerlösung, da die Länge der Zeile variieren kann.
Die Frage ist, warum beim ursprünglichen Code nichts geschrieben wird, wenn davor ein fget(c); oder fread(&c, 1, 1, optfp); steht.
Hat jemand eine Idee?
habs endlich gefunden WindowFromPoint() ist die Lösung, aber danke das ihr versucht habt mir zu helfen
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
POINT MousePos;
HWND fenster = NULL;
char a[100] = "";
while(true)
{
system("cls");
GetCursorPos(&MousePos);
fenster = WindowFromPoint(MousePos);
GetClassName(fenster, a, sizeof(a));
cout << a << endl;
Sleep(1000);
}
return 0;
}
Grr!
Aufgrund meiner Ungeschicklichkeit habe ich den Code gelöscht (ohne es zu merken) , der die Blacklist Funktion ...ähem... macht.
Die Blacklist Funktion ist folgende (Sie hat funktioniert!):
User gibt ein :
Bla.
Wird in Blacklist.txt geschrieben (funktioniert immer noch)
Das Programm soll nach den Fenstertiteln in Blacklist.txt suchen (klappte alles einwandfrei) und eben, wenn eines dieser Fenster entdeckt wurde, schließen.
Hier mein aktueller Code:
#include <iostream.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <fstream.h>
using namespace std;
int main()
{ while(true)
{
system("color 0a");
cout << "FireFox Filter geladen. \n" < endl << "\nZum laden/erstellen der Blacklist einfach 123 eingeben.\n" << endl;
int help;
cin>>help;
if (help==123)
{
cout << "\nMade by IceFire - Idea and Code by IceFire. [Thanks to c-plusplus.net] \n(C)2009. All rights reserved.\nBitte geben Sie nun 456 ein, um die Blacklist zu laden/updaten/erstellen.\n Das Angeben eines Fensters ist (bis jetzt noch) IMMER notwendig!\n" << endl;
}
else
{
cout << "\n+++Befehl nicht bekannt - Fehler+++" << endl;
}
int glog;
cin >> glog;
if (glog==456)
{
cout << "\nBitte geben Sie den Titel des Fensters an. (MIT - Mozilla Firefox)\n\n";
char bl [10000];
cin >> bl;
ofstream fout( "Blacklist.txt" );
fout << "RICKROLLED. - Mozilla Firefox";
fout << bl;
fout << endl;
}
else
{
cout << "\n+++Befehl nicht bekannt - Fehler+++" << endl;
}
HWND rr1 = NULL;
while(rr1 == NULL)
{
// Hier war der Code :(
}
cout << "****INFO**** Filter hat das öffnen dieses Links verhindert.\n\n " << endl;
SendMessage(rr1, WM_DESTROY, NULL, NULL);
Sleep(1000);
}
return 0;
}
Könnt ihr mir bitte helfen?
Heftiges Googlen half nichts.
Ich fand zwar etwas zum Thema,trotzdem.
Neee, das ist TOP SECRET und unter Verschluß des American Standard Code for Information Interchange Consortium.
Du kannst sie aber überlisten und ein Programm schreiben, das dir die Symbole mit zugehörigen Nummern ausgibt!
Boar cool^^ Aber das ist doch dan eine Cpyright verletzung xD' ( )
Jetzt mal ernst :
Danke für den Ansatz.
Werd ich mal ausprobieren und machen!
Thx for help.
Mfg Wikinger75!
ömmm Rückgabewerte.... das war das wo ich in der arbeit 0 von 6 punkten hatte
(arbeit war 2)
starthilfe wäre gut=)
ich habe inzwischen versucht in die for schleife von void rechnung() die eingabe mitreinzusetzen
void rechnung()
{
for (x=0;x<=255;x++) //Umwandlung ASCII zu Zahl
{
bin[x]=getch()
cout<<bin[x]
intb[x]=bin[x]-48;
if(intb[x]>=2)
{
cout<<enld<<"Error! bitte nur 1 oder 0 eingeben!"<<enld;
x=0;
}
}
jetzt möchte er aber unbadingt 255 eingaben damit er aus der schlleife geht ist auch doof...dabei ist mir die idee gekommen...getch() erwarted ja eine taste kann man vieleicht irgenwie festlegen das getch() nur 1 oder 0 akzeptiert und andere tasten ignoriert?!
...mein Lehrer in der Schuhle kann nicht nur schlecht erklären ich glaube der ist selbst mit der aufgabe überwordert. Zumindest hat er nach 5 minunten nachdenken aufgegeben über das anstrengende wochenende gemeckert und sich weiter bilder bei googlemaps angeguckt
MFG J1nX
du musst das verzeichnis in anführungszeichen setzen (aber maskiert \"). übrigens kannst du unter windows auch createprocess nehmen ist aber komplizierter
Hi,
bei seriellem COM-Port mußt Du Dich zum Glück nicht mit "userport" (was auch immer das ist) oder gar mit "_outp()" rumschlagen.
Für COM-Port gibt es fertige Win32-API Funktionen! (das gilt leider nicht für den parallelen LPT-Port)
Folgenden Code löscht die Leitung DTR:
(natürlich setzt das voraus, daß der COM-Port erfolgreich initialisiert und geöffnet wurde!)
b_return = EscapeCommFunction( handle_comport, CLRDTR ); //DTR
if ( b_return == 0 )
{
//Fehler_aufgetreten
}
Dto, jedoch für die Leitungen RTS und TXD:
b_return = EscapeCommFunction( handle_comport, CLRRTS ); //RTS
b_return = EscapeCommFunction( handle_comport, CLRBREAK ); //TXD
Und hier der jeweilige Gegenpart (Setzen der Leitungen):
b_return = EscapeCommFunction( handle_comport, SETDTR );
b_return = EscapeCommFunction( handle_comport, SETRTS );
b_return = EscapeCommFunction( handle_comport, SETBREAK );
Übrigens:
Logisch "0" = "ON" = Spannung +3V bis +15V am Ausgang
Logisch "1" = "OFF" = Spannung -3V bis -15V am Ausgang
Wenn wir schon beim Ausgeben dabei sind, hier gleich auch die Input-Funktion dazu:
Um die Signale von CTS, DSR, RI und DCD abfragen zu können, greifst Du auf die Funktion GetCommModemStatus() zurück.
HTH,
Martin
Das Problem ist, das ich die Maus blockieren will während diese Schleife ausgeführt wird:
...
for(i = 0; i < XSIZE; ++i)
{
Sleep(SLEEP);
SetCursorPos(x[i], y[i]);
x[i] = 0;
y[i] = 0;
}
...
Ich_anonym schrieb:
Jetzt habs ich mit fflush(stdin) versucht (ich weiß man solls nicht verwenden) und erziele auch nicht wirklich ein besseres Ergebnis.
richtig, stdin lässt sich nicht flushen. und bei scanf für 'double' verwende %lf, nicht %d.
volkard schrieb:
sag dann mal, ob du das flackern im fenstermodus wegkriegst. ich kriege es nämlich nicht weg und das macht mich sehr traurig. im vollbildmodus ist es weg.
wieso flackert das bei dir, bzw. wobei? bei einer animation? bei mir flackert nix, wenn ich erst in einen puffer schreibe und diesen dann mit WriteConsoleOutput bzw. WriteConsole ausgebe.
MfG,
a.f.s.