Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 19:24

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 70 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Mai 19, 2014 17:04 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Bei den include-Deklaration habe ich folgendes.
Code:
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string>
  4. #include <vector>
  5. #include <windows.h>

Nun habe ich gelesen, das man bei einer C++ Deklaration keine .h verwenden soll.
Nur was mache ich mit conio.h und windows.h ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Mai 19, 2014 18:01 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
mathias hat geschrieben:
Nun habe ich gelesen, das man bei einer C++ Deklaration keine .h verwenden soll.

Nicht richtig. Es bezieht sich nur auf die STL-Header.
Bei den anderen Headern verwendest du die herkömmliche Schreibweise.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Mai 19, 2014 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Es ist durchaus erlaubt, .h-Dateien zu includen. Jedoch gibt es in der Standardlibrary keine Dateien mit dieser Endung. Wenn du also irgendwo ein
Code:
  1. #include <*.h>
stehen hast, sollte dir klar sein, dass du gerade nicht die Standard-Library verwendest.

Dies ist z.B. bei conio.h und windows.h der Fall. (Ich musste gerade erstmal nachgucken, wofür conio überhaupt steht^^). Das sind beides Dateien aus der Microsoft-Welt und damit eher nicht portabel. Die Frage ist doch eigentlich, wozu du die beiden Dateien einbindest. Also welche Funktionen kennt der Compiler nicht mehr, wenn du die #include-Zeilen wegnimmst? Für diese Funktionen solltest du dir dann überlegen, ob du sie nicht mit was anderem ersetzen willst.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Mai 19, 2014 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
conio.h brauche ich für getch(), Zeichen einlesen.
windows.h für eine GotoXY-Funktion
Code:
  1. void GotoXY(short x, short y)
  2. {
  3.     COORD coord {x,y};
  4.     SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE), coord);
  5. }

Vieleicht kennt jemmand eine bessere Lösung.
Gut währe eine Bibliothek wie bei Free-Pascal die uses Crt, die läuft unter Windows und Linux.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mi Mai 21, 2014 19:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Wie lese ich Pfeiltasten mit getch() richtig aus ?

Bei ReadKey bei Pascal/Lazarus kommt immer zuerst eine #0 anschliessend der Code (#72,#75,#77,#80).
Bei getch() kommt nur bei den Pfeiltasten auf dem Ziffernblock eine #0, bei den Cursor-Tasten kommt #32.
Kommischerweise wen ich nach getch() google, da schreiben sie von #224 und ich bekomme eine #32 bei den Cursor-Tasten ? :?

Code:
  1. char key=0;
  2. key=getch();
  3. cout<<'-'<<int(key)<<'-';
  4.  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mi Mai 21, 2014 20:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich weiß garnicht, auf welcher ebene das standardisiert ist. Aber es gibt nicht ohne grund große Libs für sowas (curses z.B.). Terminals sind echt frickelig, weil es historisch betrachtet zigtausende davon gab.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Do Mai 22, 2014 13:00 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Außer zu ersten Übungszwecken oder sehr "spezieller" "abstrakter" Software(Compiler, OS, etc.) gibt es eigentlich keinen Grund, sich damit auseinander zu setzen. Ich glaube nicht das Mathias gerade solche Anwendungen schreibt. Und zu Übungszwecken ist die Taste eigentlich egal.

Sehr populäre Einsteigerlibs für richtige gragische Umgebungen außerhalb der langweiligen Kommandozeile sind moderner SFML und etwas älter im C-Stil SDL. Ich glaube zwar das es für dich noch etwas zu früh ist, aber wenn du wirklich mal etwas machen willst, fange damit an.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Do Mai 22, 2014 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
MSDN ist dein Freund bei der google suche :)

Zitat:
Die _getch und _getwch-Funktionen lesen ein einzelnes Zeichen von der Konsole, ohne das Zeichen auszugeben. Keine dieser Funktionen kann verwendet werden, um STRG+C zu lesen. Um eine Funktionstaste oder eine Pfeiltaste zu lesen, muss jede Funktion zweimal aufgerufen werden; der erste Aufruf gibt 0 oder 0xE0 zurück und der zweite Aufruf den tatsächlichen Tastencode.
Diese Funktionen sperren den aufrufenden Thread und sind daher threadsicher. Informationen zu nicht sperrenden Versionen finden Sie unter _getch_nolock, _getwch_nolock.


Wenn du deine Ausgabe mit printf, statt der kotigen cout Operator Overloading mistdreck (wer hat sich diesen scheiß eigentlich ausgedacht?), machst, dann siehst du es.

Code:
  1.  
  2. int main(int argc, const char * argv[]) {
  3.     for (int i = 0; i < 99; i++) {
  4.         printf("%i %0.2x\n",i, getch());
  5.     }
  6.     return (EXIT_SUCCESS);
  7. }
  8.  
  9.  
  10.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Do Mai 22, 2014 16:55 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Code:
  1. da schreiben sie von #224 und ich bekomme eine #32 bei den Cursor-Tasten ?

Ich habe den Fehler gefunden, ich habe mein Zeichen jetzt mit unsigned char anstelle char deklariert, jetzt kommt #224.

Zitat:
Keine dieser Funktionen kann verwendet werden, um STRG+C zu lesen.

Bei mir kommt mit getch(); und _getch() eine #3;

Was bedeutet der Unterstrich vor getch() ?

Zitat:
Wenn du deine Ausgabe mit printf, statt der kotigen cout Operator Overloading mistdreck (wer hat sich diesen scheiß eigentlich ausgedacht?), machst, dann siehst du es.

Somit ist das typische cout gar nicht so gut.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Fr Mai 23, 2014 10:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Der Unterstrich bedeutet das der Name reserviert ist und vom Programmierer nicht benutzt werden darf. Du darfst also eine Funktion getch selbst bauen aber niemals eine Funktion _getch, denn der Compiler oder die Standardbibliothek könnten diesen Namen verwenden. getch wird in der Regel nur ein Macro sein das _getch aufruft.


Die Printf-Familie ist eine Reihe von Funktionen die du, mit kleineren Abwandlungen, in so ziemlich jeder Sprache findest. Diese Funktionen beschäftigen sich ausschließlich damit, wie man Sachen als Text darstellt. Cout hingegen ist das Stream-Objekt für den Standard Output-Stream. Als solches beschäftigt es sich vorrangig damit wie man einzelne Buchstaben ausgibt.

So gesehen ist Cout also etwas flexibler als Printf, dafür aber auch komplizierter. Ein gutes Beispiel dafür sind Formatierungen:
Code:
  1.  
  2. printf("%.4i\n%i\n", 12,3); // die 12 wird Formatiert ausgegeben, die 3 nicht
  3.  
  4. std::cout.width(4); //Formatierung setzen
  5. std::cout << 12 << '\n'; //12 Ausgeben
  6. std::cout.width(0);  //Formatierung zurücksetzen
  7. std::cout << 3 << '\n'; //3 Ausgeben
  8.  


In C++ kommt noch hinzu das die Stream-Objekte komplexe Wrapper-Funktionen durch Operatoren verstecken. Das ist dann natürlich nicht mehr lustig wenn man hier noch fix etwas berechnen will, denn es gibt sehr viele Operatoren die erst nach den Shift-Operatoren ( << und >>) verarbeitet werden. Du brauchst also eigentlich immer noch Klammern oder Hilfsvariablen...

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Jun 02, 2014 19:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich bin mit Headrn am basteln.

Warscheinlich bin ich von Free-Pascal verwöhnt, wen ich in einer Unit etwas ändere, so merkt der Kompiler dies. Der gcc merkt dies nicht. Vieleicht liegt dies auch an Code::Blocks.

Auch die Trennung zwischen den cpp und hpp Dateien finde ich sehr unübersichtlich. Die Lösung von Pascal mit den Units finde ich viel sauberer.

Natürlich habe ich auch positive bei C++11 gesehen, der Code kann kann einiges mehr als der von Pascal. Z.B.:
Code:
  1. void GotoXY(short x, short y)
  2. {
  3.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), {x, y});
  4. }
Da kann ich einfach {x, y} schreiben. Bei Pascal muss ich einen Umweg über COORD machen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Jun 02, 2014 20:11 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Der Compiler kann nichts dafür, wenn er Änderungen nicht bemerkt. Das muss ein Fehler im Buildsystem(zb. diesen "Make"-Kram) sein, das bei Code::Blocks vielleicht auch irgendwie mit der IDE verknüpft ist. Ich hatte dieses Problem bisher auch mit Code::Blocks noch nicht, obwohl ich sonst Visual Studio verwende, das vom verwöhnen bei der Benutzung auf der Windows-Platform meiner Meinung nach ganz vorne liegt. Insbesondere wenn du dich eh auf Windows beschränken willst und scheinbar WinAPI nutzt, würde ich auch Visual Studio verwenden.

Die Trennung von Headern und Sources ist in der Tat nicht gerade das Gelbe vom Ei. Neben das es einfach unpraktisch ist führt es auch zu weiteren Problemen, zb. verlängert es die Compilezeiten erheblich. Es gibt schon seit längerer Zeit die Idee so genannte "Module" in C++ zu integrieren. Leider hat das der Standard bisscher nicht geschafft umzusetzen. Frühestens in C++17 wäre mit so einer Neuerung zu rechnen...

Das von dir erähnte positive gibt es übrigens auch schon in C und hat nichts mit C++11 zu tun. :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Jun 02, 2014 21:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Insbesondere wenn du dich eh auf Windows beschränken willst und scheinbar WinAPI nutzt, würde ich auch Visual Studio verwenden.

Interessant währe es schon, wen man Plattformübergreifend programmieren kann. Aber da es keine uses Crt gibt, habe ich es erst mal mit der Win-API probiert.

Zu Code::Blocks, ich würde gerne Eclipse verenden, nur verwendet Eclipse für die Ausgabe nur die interne Konale, anstelle der Windows cmd.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Jun 02, 2014 21:22 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Und wieder sollte "SetConsoleCursorPosition" schuld sein, oder, weil sonst sollte die Eclipse Konsole genauso gut/besser sein als die von Windows. Wofür brauchst du die Funktion überhaupt konkret? Sonst kann ich nur nochmal sagen, das man auf solche Spielereien in 99,9% der Fälle verzichten sollte. Die Konsole dafür einfach nicht ausgelegt. Vielleicht war es in Pascal üblich die Funktion für irgendetwas zu nutzen, was sich mir verschließt. Ich weiß nur, dass man sie in C++ nicht verwendet, sonst wäre sie ja auch standardisiert, wie du dir sicher selbst denken kannst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ein paar Fragen zu C++11
BeitragVerfasst: Mo Jun 02, 2014 22:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1282
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Wofür brauchst du die Funktion überhaupt konkret?

Wie kann man sonst so ein Menü machen ?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 70 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]