Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Prüfen ob das aktuelle Fenster den Focus hat

Frage Entwicklung C und C++

Mitglied: Power-Poler

Power-Poler (Level 1) - Jetzt verbinden

11.11.2013 um 18:11 Uhr, 2082 Aufrufe, 12 Kommentare, 2 Danke

Abend

Versuche michgerade daran, das Spiel SNAKE in C zu Programmiern.
Soweit funktioniert auch alles, die Schlange bewegt sich, frist kleine '#' und wächst dabei.
Auch kann sie sich selbst beisen und man verliert.

Nun zu meinem Problem.
Die gedrükte Pfeiltaste frage ich mit:
GetAsyncKeyState(Links oder rechts oder rauf oder runter, jenachdem welche taste ich abfragen möchte ob sie gedrückt wurde)
Also zum Beispiel:
GetAsyncKeyState(VK_LEFT);

nun zu meinem Problem.
Wenn ich das CMD fenster, in dem sich die Schnlage bewegt aus dem Focus nehme, werden die Pfeiltasten trotzdem noch eingelsen.

Also wenn ich in einem Ordner Pfeil hoch oder runter drücke, bewegt sich im Hintergrund die Schlange.

Gibt es hier eine Möglichgeit sowas in den Programmcode einzuarbeiten:
if(Ja ich habe den Focus)
um eine Weitere richtingsänderung der Schlange zu unterbinden, wenn das CMD Fenster nicht den Focus hat?

Schonmal Danke für eine Antwort

Mit freundlichen Grüßen
Power-Poler
Mitglied: rubberman
11.11.2013 um 19:04 Uhr
Hallo Power-Poler,

rein empirisch würde ich ja ein getch() in eine Threadfunktion packen, dann hat sich dein Problem von selbst erledigt. Wer braucht schon GetAsyncKeyState()
Ansonsten, schau mal ins MSDN, da findest du WinAPIs, wie GetActiveWindow() oder GetFocus().

Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
11.11.2013 um 19:18 Uhr
Danke für deine Antwort.
GetFocus(), habe ich bereits probiert, da steht im Debug immer "Speicher kann nicht gelesen werden"
GetActiveWindow() schau ich mir mal an.

Naja getch() würde zwar gehen, aber dan würde die Schlange auf Input warten, was ja nicht sin der Sache ist.
Sie soll sich ja bei keinen Tastendruck von sich aus bewegen.
Bitte warten ..
Mitglied: rubberman
11.11.2013 um 21:19 Uhr
Zitat von Power-Poler:
Naja getch() würde zwar gehen, aber dan würde die Schlange auf Input warten, was ja nicht sin der Sache ist.

Darum habe ich von einer Threadfunktion gesprochen, die asynchron auf Input wartet

Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
20.11.2013 um 16:40 Uhr
Habe es jetzt mit GetAktiveWindow versucht, bekomme immer noch den Fehler "Speicher kann nicht gelesen werden".

Wie genau könnte ich einen solche asynchronen Threadfunktion erzeugen?
Bitte warten ..
Mitglied: rubberman
20.11.2013, aktualisiert um 18:33 Uhr
Naja, das ist nicht sooo schwer. Für Standard-C gibt es da _beginthread() und _beginthreadex(), Die WinAPI hätte da auch noch was zu bieten, aber für deine Zwecke reicht die erstgenannte Funktion völlig aus. Im MSDN findet sich wie immer die entsprechende Referenz. Wie du siehst wird die entsprechende Funktion übergeben, die als Thread laufen soll. Ebenso ist es möglich einen Parameter für die Threadfunktion als Voidpointer zu übergeben. Das bedeutet für die Threadfunktion, dass sie immer vom Typ void ist (also keinen Wert zurück geben kann) und einen Parameter vom Typ void* akzeptiert. Dieser zeigt dann auf den Speicherbereich der vorher deklarierten Variable aus der aufrufenden Funktion.

Mal ein Beispiel mit entsprechenden Kommentaren.
01.
#include <windows.h> 
02.
#include <process.h> 
03.
#include <stdio.h> 
04.
#include <conio.h> 
05.
 
06.
// vordefinierte Werteliste 
07.
#define ESC    27 // Escape       (ASCII 27) 
08.
#define RIGHT 333 // Pfeil rechts (256 + Scancode 77) 
09.
#define LEFT  331 // Pfeil links  (256 + Scancode 75) 
10.
#define UP    328 // Pfeil oben   (256 + Scancode 72) 
11.
#define DOWN  336 // Pfeil unten  (256 + Scancode 80) 
12.
 
13.
void __cdecl Fn_GetKey(void *const pInt); // Prototyp der Threadfunktion 
14.
 
15.
int main(void) 
16.
17.
  int iInput = 0; // Wert wird von der Threadfunktion geändert 
18.
  char chOutput = '\x0f'; // Startzeichen 
19.
 
20.
  // Threadfunktion aufrufen, Zeiger auf iInput wird übergeben 
21.
  if (_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&iInput) == ((uintptr_t)(intptr_t)-1)) 
22.
    return EXIT_FAILURE; // wenn Thread nicht erstellt werden konnte, raus hier 
23.
 
24.
  while (iInput != ESC) // Endlosschleife bis Escape 
25.
26.
    switch(iInput) 
27.
28.
      case RIGHT: 
29.
        chOutput = '\x10'; 
30.
        break; 
31.
      case LEFT: 
32.
        chOutput = '\x11'; 
33.
        break; 
34.
      case UP: 
35.
        chOutput = '\x1e'; 
36.
        break; 
37.
      case DOWN: 
38.
        chOutput = '\x1f'; 
39.
40.
 
41.
    printf("%c\n", chOutput); // Ausgabe 
42.
    Sleep(200); 
43.
44.
 
45.
  return EXIT_SUCCESS; 
46.
47.
 
48.
// Threadfunktion, Parameter *pInt ist Zeiger auf Speicherbereich von iInput 
49.
void __cdecl Fn_GetKey(void *const pInt) 
50.
51.
  int iKey = 0; 
52.
 
53.
  do // Endlosschleife bis Escape 
54.
55.
    iKey = _getch(); // Warte auf Tastatureingabe 
56.
    // Bei F- oder Pfeiltasten, gibt der erste Aufruf 0 oder 224 zurück 
57.
    // Führe _getch() erneut aus um den Scancode aus dem Puffer zu lesen 
58.
    // http://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx 
59.
    if (iKey == 0 || iKey == 224) 
60.
      iKey = 256 + _getch(); // 256 wird zwecks Unterscheidung zu ASCII Werten addiert 
61.
 
62.
    *((int*)pInt) = iKey; // Schreibe neuen Wert in den adressierten Speicherbereich 
63.
 
64.
  } while (iKey != ESC); 
65.
 
66.
  _endthread(); // Thread beenden 
67.
}
Wie du siehst, reagiert das Programm auf Pfeiltasten und Esc zum Beenden. Die Schleife in der Mainfunktion läuft unabhängig davon weiter, während der Wert für iInput in der Threadfunktion verändert wird.
Soweit ziemlich simpel, oder?

Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
21.11.2013 um 17:02 Uhr
Vielen Dank, funktioniert einwandfrei.
Glaube auch das die Eingabe direkter ist als vorher.
(Versuche gerade die Funktion zu Hintersteigen, weshalb dort eigendlich nur void drinsteht.
Laut der libary scheint es ein start_address zu sein. Weshalb die Funktion aber auch ohne auskommt, weiß ich ja gerade nicht)
Achso, kann man damit auch gleichzeitigen Tastendruck abfragen?
Also zum Beispiel die Leertaste und eine Richtungstaste, oder links und hoch für diagonal nach oben?
Kann dir gerne meinen Quellcode zuschicken, kann ihn natürlich auch hier veröffentlichen, würde ich aber nur sehr ungern machen.
Wahrscheinlich wird man am code auch erkennen das ich noch Anfänger bin, behelfe mir einiger (wie ich finde) unschöner "Tricks" für bestimmte Bedingungen.

Nochmal vielen Dank für deine Hilfe
Bitte warten ..
Mitglied: rubberman
21.11.2013, aktualisiert um 23:48 Uhr
Zitat von Power-Poler:

Laut der libary scheint es ein start_address zu sein.
Gemeint ist die Startadresse der Funktion. Das ist lediglich ein Name und steht dort eigentlich zum besseren Verständnis und nicht um dich zu verwirren

Zitat von Power-Poler:

Achso, kann man damit auch gleichzeitigen Tastendruck abfragen?
Dazu solltest du dir vielleicht GetKeyboardState() ansehen. Diese Funktion füllt ein Bytearray mit dem Status aller Tasten, bei dem du mit bitweisem UND prüfen kannst ob eine bestimmte Taste gedrückt wurde. Mit logischem UND kannst du mehrere solcher Tests zusammenfassen, um herauszufinden ob bestimmte Tastenkombinationen gedrückt wurden. (Ist aber nur Theorie, hatte heute keine Zeit da was zu testen.)

Grüße
rubberman

EDIT:
Kurz skizziert für Kombinationen der Pfeiltasten ...
01.
#include <windows.h> 
02.
#include <process.h> 
03.
#include <stdio.h> 
04.
#include <conio.h> 
05.
 
06.
// vordefinierte Werteliste 
07.
#define ESC         27 // Escape       (ASCII 27) 
08.
#define RIGHT      333 // Pfeil rechts (256 + Scancode 77) 
09.
#define LEFT       331 // Pfeil links  (256 + Scancode 75) 
10.
#define UP         328 // Pfeil oben   (256 + Scancode 72) 
11.
#define DOWN       336 // Pfeil unten  (256 + Scancode 80) 
12.
#define UPRIGHT   1000 // 4 frei definierte Werte > 511 
13.
#define UPLEFT    1001 
14.
#define DOWNRIGHT 1002 
15.
#define DOWNLEFT  1003 
16.
 
17.
void __cdecl Fn_GetKey(void *const pInt); // Prototyp der Threadfunktion 
18.
 
19.
int main(void) 
20.
21.
  int iInput = 0; // Wert wird von der Threadfunktion geändert 
22.
  char szOutput[3] = "\x0f"; // Startzeichen 
23.
 
24.
  // Threadfunktion aufrufen, Zeiger auf iInput wird übergeben 
25.
  if (_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&iInput) == ((uintptr_t)(intptr_t)-1)) 
26.
    return EXIT_FAILURE; // wenn Thread nicht erstellt werden konnte, raus hier 
27.
 
28.
  while (iInput != ESC) // Endlosschleife bis Escape 
29.
30.
    switch(iInput) 
31.
32.
      case RIGHT: 
33.
        strcpy(szOutput, "\x10"); 
34.
        break; 
35.
      case LEFT: 
36.
        strcpy(szOutput, "\x11"); 
37.
        break; 
38.
      case UP: 
39.
        strcpy(szOutput, "\x1e"); 
40.
        break; 
41.
      case DOWN: 
42.
        strcpy(szOutput, "\x1f"); 
43.
        break; 
44.
      case UPRIGHT: 
45.
        strcpy(szOutput, "\x1e\x10"); 
46.
        break; 
47.
      case UPLEFT: 
48.
        strcpy(szOutput, "\x1e\x11"); 
49.
        break; 
50.
      case DOWNRIGHT: 
51.
        strcpy(szOutput, "\x1f\x10"); 
52.
        break; 
53.
      case DOWNLEFT: 
54.
        strcpy(szOutput, "\x1f\x11"); 
55.
56.
 
57.
    printf("%s\n", szOutput); // Ausgabe 
58.
    Sleep(200); 
59.
60.
 
61.
  return EXIT_SUCCESS; 
62.
63.
 
64.
// Threadfunktion, Parameter *pInt ist Zeiger auf Speicherbereich von iInput 
65.
void __cdecl Fn_GetKey(void *const pInt) 
66.
67.
  int iKey = 0; 
68.
  BYTE rgKeys[256]; 
69.
 
70.
  do // Endlosschleife bis Escape 
71.
72.
    iKey = _getch(); // Warte auf Tastatureingabe 
73.
    // Bei F- oder Pfeiltasten, gibt der erste Aufruf 0 oder 224 zurück 
74.
    // Führe _getch() erneut aus um den Scancode aus dem Puffer zu lesen 
75.
    // http://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx 
76.
    if (iKey == 0 || iKey == 224) 
77.
      iKey = 256 + _getch(); // 256 wird zwecks Unterscheidung zu ASCII Werten addiert 
78.
 
79.
    GetKeyState(0); // Diesen Aufruf verstehe ich selbst nicht, funktioniert aber nicht ohne. 
80.
    GetKeyboardState(rgKeys); // Den Status aller Tasten in rgKeys speichern. 
81.
 
82.
    // Tastenkombinationen abfragen 
83.
    // http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx 
84.
    if (rgKeys[VK_UP] & 0x80 && rgKeys[VK_RIGHT] & 0x80) 
85.
      iKey = UPRIGHT; 
86.
    else if (rgKeys[VK_UP] & 0x80 && rgKeys[VK_LEFT] & 0x80) 
87.
        iKey = UPLEFT; 
88.
      else if (rgKeys[VK_DOWN] & 0x80 && rgKeys[VK_RIGHT] & 0x80) 
89.
          iKey = DOWNRIGHT; 
90.
        else if (rgKeys[VK_DOWN] & 0x80 && rgKeys[VK_LEFT] & 0x80) 
91.
            iKey = DOWNLEFT; 
92.
 
93.
    *((int*)pInt) = iKey; // Schreibe neuen Wert in den adressierten Speicherbereich 
94.
 
95.
  } while (iKey != ESC); 
96.
 
97.
  _endthread(); // Thread beenden 
98.
}
Bitte warten ..
Mitglied: rubberman
24.11.2013 um 18:51 Uhr
Ich hab mich noch mal kurz mit der ursprünglichen Frage beschäftigt.
Bei mir funktioniert es letztlich mit der Funktion GetGUIThreadInfo().
01.
#include <windows.h> 
02.
#include <stdio.h> 
03.
#include <stdlib.h> 
04.
 
05.
int main() 
06.
07.
  GUITHREADINFO gti; // http://msdn.microsoft.com/en-us/library/windows/desktop/ms632604(v=vs.85).aspx 
08.
  HWND hwndMe = GetConsoleWindow(); // eigenes Fensterhandle 
09.
 
10.
  memset(&gti, 0, sizeof(gti)); // Speicherbereich der Struktur von Datenmüll befreien 
11.
  gti.cbSize = sizeof(gti); // Größe der Struktur muss laut Doku festgelegt werden 
12.
 
13.
  for (;;) // Endlosschleife 
14.
15.
    GetGUIThreadInfo(0, &gti); // Struktur mit Daten füllen 
16.
 
17.
    // Wenn die Member hwndActive und hwndFocus dem eigenen Fensterhandle entsprechen, 
18.
    // solltest du davon ausgehen können, dass du eingehende Tastatureingaben auf dein 
19.
    // Fenster anwenden kannst. 
20.
    if (gti.hwndActive == hwndMe && gti.hwndFocus == hwndMe) 
21.
      puts("JA"); 
22.
    else 
23.
      puts("NEIN"); 
24.
 
25.
    Sleep(200); 
26.
27.
  return 0; 
28.
}
Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
17.02.2014 um 19:37 Uhr
Abend, sorry das ich mich schon wider melde.

Versuche mich gerade wider an einem kleinen Spiel
Dieses mal will ich das ganze etwas übersichtlicher und aufgeräumter im Quellcode haben.
Gerade versuche ich die main von der Funktion Fn_GetKey zu trennen.
Habe jetzt eine Quelle.cpp mit der main.
Eine input.cpp mit der Funktion Fn_GetKey
und eine input.h die das ganze vereinen soll.
Folgendes Problem.
Folgede if Abrfage in der main schlägt fehl:
01.
if (_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&iInput) == ((uintptr_t)(intptr_t)-1)) 
Wenn ich diese Bedingung weglasse gehts.
Meine eingaben werden ausgegeben (die int werte)
die Funktion "_beginthread" liefert 48 zurück, der rechte teil mit dem der wert verglichen wird -1.
Ich schätze mal das es nicht gerade sinnvoll ist, die Bedingung einfach wegzulassen.
Mache ich da irgendwas falsch, bzw mache ich einen Denkfehler?
Kann natürlich sein, das mein Denkfehler dort liegt, das ich überhaupt versuche das ganze voneinander zu trennen.

Schonmal danke für deine Antwort.
Bitte warten ..
Mitglied: rubberman
17.02.2014, aktualisiert um 20:55 Uhr
Hallo Power-Poler.

Die Bedingung macht durchaus Sinn. Wie du in der Referenz zu _beginthread nachlesen kannst, gibt die Funktion den Wert -1L zurück, wenn sie fehlschlägt. Darum lasse ich oben im Code das Programm per return EXIT_FAILURE; enden, sobald dieser Fall eintritt. Wenn die Funktion in deinem Fall 48 zurückgibt, ist also alles in Ordnung. Was folgt denn bei dir auf diese Bedingung?

Zitat von Power-Poler:

Kann natürlich sein, das mein Denkfehler dort liegt, das ich überhaupt versuche das ganze voneinander zu trennen.
Geschmackssache.
Du musst natürlich bedenken, was beim Kompilieren passiert. Jede *.cpp Datei (wieso eigentlich cpp, wenn du C Code schreibst?) wird separat zu einer Objektdatei kompiliert. Erst der Linker macht aus den einzelnen Objektdateien die *.exe. Im Normalfall hat der Compiler also immer nur eine Quelldatei im Auge und versucht den Code darin zu optimieren.
Ergo: Wenn du die Mainfunktion von den darin aufgerufenen Funktionen trennst, mag das für dich übersichtlicher werden, den Compiler beschneidest du aber damit in seiner Fähigkeit den Gesamtcode zu optimieren. Der Zugewinn an Übersichtlichkeit ist marginal, der Performanceverlust deines Programms kann dagegen oft überwiegen. Einfach alle unterschiedlichsten Funktionen in ein separates Paar Quell- und Headerdateien zu packen macht im Zweifelsfall keinen Sinn. Sinnvoll wäre allerdings die Präprozessoranweisungen (wie #define ...) und die Funktionsprototypen in eine Headerdatei zu bringen. Das Includieren dieses Headers lässt den Compiler den Code des Headers an dieser Stelle einlesen (so, als würde er dort geschrieben stehen). Das erhöht die Übersichtlichkeit und behindert den Compiler in keinem Fall.

Bei großen Projekten solltest du schon trennen, um den Überblick nicht zu verlieren. Dann aber so, dass es sinnvoll wird. Bspw. alle Funktionen und Strukturen, die einem bestimmten Themenzweck dienen, zusammen mit denen, die evtl. von diesen aufgerufen werden, zusammenfassen.

Grüße
rubberman
Bitte warten ..
Mitglied: Power-Poler
18.02.2014, aktualisiert um 09:50 Uhr
01.
#include <stdlib.h> 
02.
#include <stdio.h> 
03.
#include "input.h" 
04.
 
05.
int main(void){ 
06.
	int input = 0; 
07.
	_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&input); 
08.
	//if (_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&iInput) == ((uintptr_t)(intptr_t)-1)) { 
09.
		do{		 
10.
			printf("%d\n",input); 
11.
			input=0; 
12.
			 
13.
			_sleep(50); 
14.
		}while(input!=ESC); 
15.
	//} 
16.
	return 0; 
17.
}
Wenn ich es so mache gehts, wenn ich die if Bedingung einbinde, schlägt die Überprüfung fehl, und er überspringt die Schleife.
01.
if (_beginthread((void(*)(void*))Fn_GetKey, 0, (void*)&iInput) ==(test= ((uintptr_t)(intptr_t)-1))) 
Habe mal testeshalber das gemacht und einen Breakpoint gesetzt.
beginthread liefert wie gesagt 48 zurück. test hat den Wert -1.


Ein großes Projekt wird das sicher nicht. Aber du schreibst das man bestimmte Funktionen zusammenfassen sollte (sobald es größer wird).
Da ich damit etwas Üben möchte, versuche ich das ganze mal so aufzutrennen, Das es für mich sinnvoll wäre.
Also eine Datei die die Tastatur Abfragt. Eine die nachher den Inhalt des Fensters neu aufbaut, sobald sich was ändert. Und dan mal schauen was ich sonst noch brauche.
cpp Dateien deshalb weil VS 2012 sie Standarthaft so benennt. Ich könnte sie von Hand .c nennen, aber warum sollte ich das tun? Ich hoffe ja noch (keine Ahnung ob es klappt) später sobald das ganze doch größer wird, und ich c++ Funktionen brauche, einfach den Compiler anzuweisen in c++ zu kompilieren.


Danke für deine Antwort

EDIT:
Ahh, da liegt mein Problem.
Man sollte auch dan ganze vollständig lesen.
Da ist keine geschweifte Klammer mehr nach der if Anweisung, es folgt direkt eine return Anweisung.
Werde es dran dementsprechend umbauen.
Bitte warten ..
Mitglied: rubberman
18.02.2014 um 19:07 Uhr
Zitat von Power-Poler:

Ich hoffe ja noch (keine Ahnung ob es klappt) später sobald das ganze doch größer wird, und ich c++ Funktionen brauche, einfach den Compiler anzuweisen in c++ zu kompilieren.
Umgekehrt wird ein Schuh draus. VS kompiliert standardmäßig als C++, wenn du nicht explizit in den Projekteigenschaften einstellst, dass als C kompiliert werden soll. In dem Fall zieht VS aber den Uralt - C89 - Standard an. Ergo: VS ist nicht besonders gut geeignet um C zu lernen.
BTW Wenn du C++ Code schreiben willst, gewöhne dir C besser gar nicht erst an. Das versaut den Stil. Da spreche ich aus eigener Erfahrung. Ich bin so auf C und die prozedurale Schreibweise geprägt, dass ich wohl nie behaupten werde, einigermaßen vernünftiges C++ zu schreiben. Die beiden Sprachen sind unterschiedlicher als du denkst, auch wenn C aus Kompatibilitätsgründen fast vollständig in C++ aufgeht.

EDIT:
Ahh, da liegt mein Problem.
Hehe. Noch deutlicher hätte ich es auch wirklich nicht schreiben können

Grüße
rubberman
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Viren und Trojaner
Aktuelle Gefahrenlage: alle Fakten im -Sicherheitsreport (1)

Link von runasservice zum Thema Viren und Trojaner ...

Informationsdienste
gelöst Aktuelle Firefox MSI Datei!? (8)

Frage von Hendrik2586 zum Thema Informationsdienste ...

Windows Server
RemoteApp Fenster kommt nicht in den Vordergrund (1)

Frage von thomasreischer zum Thema Windows Server ...

Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...