Bisschen Code
-
Hey Leute,
Ein kleines Programm nichts Welt bewegendes. Kann man den Code verbessern?
Gibt es die Möglichkeit das das Programm bei der Eingabe sofort reagiert ohne das man noch Enter drücken muss?Danke im voraus.
#include <iostream> #include <conio.h> using namespace std; int main() { char field[7][7], enter; int a, b; a = b = 3; start: for( int y = 0; y < 7; y++ ) { for( int x = 0; x < 7; x++ ) { field[y][x] = '0'; field[a][b] = 'X'; cout << field[y][x]; } cout << endl; } cin >> enter; system("cls"); switch( enter ) { case 'w': //Mit Absicht nur klein Buchstaben geschrieben a--; goto start; break; case 'd': b++; goto start; break; case 'a': b--; goto start; break; case 's': a++; goto start; break; } getch(); return 0; }
-
Gibt einiges zu verbessern:
- Nur gleiche Typen innerhalb einer Deklaration
- Variablen bei Deklaration initialisieren, nicht eine Zeile danach
- Kein
goto, stattdessen Schleife - Sinnvollere Variablennamen
- Evtl. auf nicht-portable Funktionen verzichten
P.S.:
Signatur schrieb:
Bevor du mir eine Antwort gibst! Überleg nochmal ganz genau ob du mir Sinnlose Antworten gibst mit denen ich nichts anfangen kann?! Oder dann doch dein best mögliches gibst um mir etwas zu erklären. Ansonsten lass es bleiben.
Die Signatur kommt eher arrogant rüber, du dürftest damit das genaue Gegenteil erreichen. Ich würde sie entfernen.
-
Nexus schrieb:
Gibt einiges zu verbessern:
- Nur gleiche Typen innerhalb einer Deklaration
- Variablen bei Deklaration initialisieren, nicht eine Zeile danach
- Kein
goto, stattdessen Schleife - Sinnvollere Variablennamen
- Evtl. auf nicht-portable Funktionen verzichten
Wie müsste der Code ihrer Vorstellung nach aussehen?
Gibt es die Möglichkeit das das Programm bei der Eingabe sofort reagiert ohne das man noch Enter drücken muss?
-
Chechen65 schrieb:
Wie müsste der Code ihrer Vorstellung nach aussehen?
Hab ich ja geschrieben. Umsetzen darfst du es selbst

Chechen65 schrieb:
Gibt es die Möglichkeit das das Programm bei der Eingabe sofort reagiert ohne das man noch Enter drücken muss?
Keine portable, nein.
-
Edit: Hat sich schon erledigt.
-
Verstehe leider einige Punkte nicht oder weiß nicht wie umsetzen.
-
Chechen65 schrieb:
Verstehe leider einige Punkte nicht oder weiß nicht wie umsetzen.
Dann stelle konkrete Fragen.
-
Chechen65 schrieb:
Verstehe leider einige Punkte nicht oder weiß nicht wie umsetzen.
Gibt es einen Preis für denjenigen, der errät was du nicht verstehst?
Wie oft wird in deinem Programm
field[a][b] = 'X';durchgeführt, und wie oft ist es nötig?
^Ok, der Compiler wird das schon richten, aber ...^
-
DirkB schrieb:
Wie oft wird in deinem Programm
field[a][b] = 'X';durchgeführt, und wie oft ist es nötig?
^Ok, der Compiler wird das schon richten, aber ...^Ach,
das hab ich gar nicht bemerkt. Ja danke 
EDIT: Wo muss das stehen? Vor der Schleife geht das nicht.
-
Chechen65 schrieb:
Wo muss das stehen? Vor der Schleife geht das nicht.
Ich übersetze mal:
Oh mein Gott, ich kann mir gar nicht erklären, warum ein Wert, den ich vorher gesetzt habe, in einer Schleife, in der ich diesen Wert überschreibe, nicht erhalten bleibt. Und selbst wenn ich das verstehen würde, gibt es dafür auch keine Lösung ... ich meine, man kann ja nicht einfach, sagen wir mal, die Schleife davon abhalten, in den Wert zu schreiben ...
Deine Signatur ist ein Witz, oder?
Ich formuliere es mal so: ob ich eine hilfreiche Antwort gebe, entscheidest schon mal gar nicht du. Wenn dir das nicht passt, kannst dich gerne verziehen.DirkB schrieb:
Ok, der Compiler wird das schon richten, aber ...
Würde er nicht - zumindest mein g++ 4.6.1. Deutlicher Unterschied im Binärdump.
Wieso geht eigentlich jeder davon aus, dass der Compiler das schon richten wird? Wieso geht man nicht davon aus, dass der Compiler das eben NICHT richten wird, und dass man besser anfängt, seinen eigenen Code auf Vordermann zu bringen?
-
Weil das ganz schnell mal übertrieben wird und zu Premature Optimization ausartet, was dir dann wiederum schnell den Hals bricht.
Wie gewohnt sollte man da lieber schauen, dass man funktionierenden Code schreibt und den im Nachhinein gezielt optimiert. Gleichzeitig sollte man aber auch etwa so designen, dass solche semantischen Ungenauigkeiten eben nicht passieren.
In diesem Fall würde es reichen, dass das "field[a][] = 'x'" nach der Schleife kommt. Problem dabei ist, dass dann die Konsolen-Ausgabe falsch aussieht.
Das wiederum liegt daran, dass die Ausgabe nicht mit der Initialisierung vermischt werden sollte.