hangman programmierung
-
Guten Morgen zusammen,
ich bin zur Zeit dabei ein Hangman-Programm zu schreiben (ja, mir ist bewusst dass es das zu Hauf zum Copy-Pasten im Internet gibt, aber das ist nicht Sinn der Sache; ich bin ein C-Neuling und möchte mich langsam in C einarbeiten, da hilft mir kopieren nicht weiter...)
diese Funktion soll den geratenen Buchstaben abfragen, diesen mit jeder stelle des hunderstelligen ratewort-arrays vergleichen und an den Stellen, an denen eine Übereinstimmung vorliegt eben diesen Buchstaben an eben diese Stelle in das Array der erratenen Buchstaben(geraten[]) einträgt und z=1 setzt. zuletzt wird z testweise ausgegeben, das ist aber nur für mich als überprüfung gedachtAlle genutzten Variablen und Arrays wurden vorher ordnungsgemäß deklariert.
Leider hab ich es nicht geschafft, eine compilierbaren Code zu kopieren, wenn es nötig ist kann ich gerne noch den gesamten Code postenMeine Frage ist hauptsächlich, ob der folgende Code das gewünschte tut oder ob ich irgendwo einen Denkfehler drin habe.
Heraus kommt bei mir ca. 100x Buchstabe vorhanden, es sei denn der eingegebene Buchstabe ist nicht Teil des eingegebenen Wortes, dann läuft das programm (annähernd) gewünscht abvoid ratefunktion()
{
printf("\n\nBitte Buchstabe eingeben: \n\n");
scanf("%c",&eingabeBuchstabe);
z=0;
for (h=0;h<100;h++)
{
if (eingabeBuchstabe==ratewort[h])
{
printf("Buchstabe vorhanden!");
geraten[h]=eingabeBuchstabe;
z=1;
}
}
printf("%i",z)
}Viele Grüße und danke im Vorraus,
Rodem
-
Rodem schrieb:
Meine Frage ist hauptsächlich, ob der folgende Code das gewünschte tut oder ob ich irgendwo einen Denkfehler drin habe.
Wenn ich mir alles was an dem Code fehlt richtig hindenke, dann ist der Code größtenteils richtig. Bist du sicher, dass du bis 100 laufen möchtest und nicht bis zum Ende des Wortes?
Wichtig: Der Code ist eine Designkatastrophe. Globale Variablen gilt es zu vermeiden (in der Regel sind sie sogar komplett vermeidbar), nicht jeden dummen Zähler global zu machen! Damit wirst du später gewaltige Probleme bekommen. Womöglich sogar schon bei diesem Programm, so einfach es auch ist. Anfänger zu sein ist keine Ausrede. In der Fahrschule lässt dich der Fahrlehrer in den ersten Tagen auch nicht zu schnell oder auf der falschen Seite fahren. Gleich richtig lernen! Außerdem: Funktionen klarere Aufgaben geben. ratefunktion? Was macht die genau? Diese Frage lässt sich bei dir kaum klar beantworten, sie macht von allem ein bisschen.
ich bin ein C-Neuling und möchte mich langsam in C einarbeiten, da hilft mir kopieren nicht weiter...
Gute Einstellung
, leider viel zu selten geworden
.
-
mir ist bewusst dass es eine Designkatastrophe ist, trotz deines guten arguments würde ich gerne erstmal die grundfunktionen begreifen, danach mach ich mich mit ökonomischem programmieren vertraut, ich lerne ja auch beim autofahren nicht sofort umweltschonend zu fahren
habs jetzt übrigens gelöst, es hat lediglich die länge der arrays gefehlt und die richtige definition des geraten arraysVielen Dank für die Tipps, ich glaube ich sollte hier mal öfter vorbeischauen
lg, Rodem
-
so, schon registriert, freu mich auf eine interessante zusammenarbeit
EDIT:
dahingehend auch gleich schon die nächste Frage: wie kann man in C den Inhalt gesamter arrays vergleichen? einfach perif(array1==array2) { printf("GLEICH!"); } else { printf("UNGLEICH!"); }
?
lg, Rodem
-
Nein.
Du musst jedes Element einzeln vergleichen.1
Wenn du aber Zeichenketten vergleichen willst, kannst du dafür
strcmp()
verwenden. Das is tin der string.h deklariert.1Es geht auch mit memcmp aus der string.h
Tipp:
Markiere deinen Code und klicje auf den C/C++ Button unter den
Dann bleibt die Formatierung erhalten und der Code wird farbig und bunt.
-
formatierung erledigt
heißt also folgender Code wäre funktional?#include <stdio.h> int main() { char array1[100]={a,b,c,d,e} char array2[100]={a,b,c,x,y,z} int i=0; int zaehler=0; for(i=0;i<100;i++) { if(array1[i]==array2[i]) { zaehler++; } } if(zaehler==100) { printf("Arrays sind gleich!"); } else { printf("Arrays sind gleich!"); } return 0; }
selbstverständlich immer mit negativem Ergebnis in diesem Fall...
-
Rodem schrieb:
danach mach ich mich mit ökonomischem programmieren vertraut, ich lerne ja auch beim autofahren nicht sofort umweltschonend zu fahren
Ökonomisch (schnell?) ist ja noch nicht, es geht darum, dass du im Moment die Kupplung nicht richtig benutzt und daher das Auto an jeder Kreuzung abwürgen wirst. Strukturierte Programmierung ist Grundfunktion.
Rodem schrieb:
heißt also folgender Code wäre funktional?
Nein, schon in der dritten Zeile compiliert das nicht und das hättest du auch leicht feststellen können. Selbst wenn man die Fehler beseitigt wäre das Ergebnis immer noch falsch. Die Frage die sich hier stellt ist, was ist array1[5] bis array1[99] und ebenso bei array2 und was passiert, wenn du diese Werte vergleichst und möchtest du das überhaupt?
-
hmm, so gesehen hast du natürlich recht
ich denke ich werde mich damit mal ein bisschen mehr auseinandersetzen, vielen Dank für den HinweisFlüchtigkeitsfehler beseitigt ('' und ; vergessen), dennoch ist das Ergebnis wie du prophezeit hast falsch, ich verstehe nur leider noch nicht wieso
-
Ich habe in meinen Beitrag oben noch eine Antwort auf deinen Code reineditiert, während du schon wieder geantwortet hast.
-
habe den Code mal wie folgt editiert:
#include <stdio.h> int main() { char array1[5]={'a','b','c','d','e'}; char array2[5]={'a','b','c','x','y'}; int i=0; int zaehler=0; for(i=0;i<5;i++) { if(array1[i]==array2[i]) { zaehler++; } } if(zaehler==5) { printf("Arrays sind gleich!"); } else { printf("Arrays sind gleich!"); } return 0; }
leider sind die Ergebnisse nachwie vor falsch, bin etwas ratlos
-
oh gott ich depp -.-
tut mir leid...
ist ja offensichtlich was ich falsch gemacht habe ^^so, nachdem ich die Ausgaben entsprechend angepasst habe funktioniert auch alles ^^
danke für deine Hilfe
-
Deine Arrays sollten nullterminiert sein, wenn du mit Zeichenketten arbeitest
Dann kommst du auch mit den Funktionen aus der string.h zurecht.... char array1[] = "abcde"; // Der Compiler hängt automatisch die '\0' dran und bestimmt die Länge char array2[] = "abcxy"; ...
-
ok, danke für den Hinweis