DO-WHILE-Fehler
-
Sorry für die Doppelposts..hab mich im Affekt verklickt...
-
MikeTheT schrieb:
Skym0sh0 schrieb:
Komm mal wieder runter. DirkB hat recht. Und egal ob der Intendationstyle von dir, von DevC++ oder vom kaiser von China gemacht ist.
Objektiv gesehen ist der totale scheisse.
(Auch ein Grund warum ich deinen Code aus dem Eingangspsot nichtmals durchgelesen hab.)Jetzt, wo du den ganzen Code gepostet hast, der ganze Einrückungsstil ist schlecht. Darüber hinaus ist DevCpp mehr als veraltet. Nimm entweder CodeBlocks oder Netbeans oder Eclipse oder Visual Studio(wenn Windows).
Nein tu ich nicht! Der Ton macht die Musik, und es kommt sehr wohl darauf an wie man wem etwas sagt! Alles beruht auf Resonanz.. wie man in den Wald hineinruft so kommt es auch zurück. Ihr könnt ihr gerne sagen was ich besser machen soll, ihr kennt euch sicher besser aus als ich ! Aber wie, ist mir sehr wichtig... LG und bitte um weitere Hilfestellungen
Der Ton von DirkB war noch ganz in Ordnung und sachlich, sowas musste hier akzeptieren.
-
Visual Studio würde so einrücken.
(Tasten Strg+A, Alt+F8, bzw Menu "Bearbeiten/Alles markieren", "Bearbeiten/Erweitert/Auswahl formatieren")
Schau, wie eisern immer die schließende geschweifte Klammer genau unter der passenden öffnenden ist. Mußt zugeben, daß das beim Lesen hilfreich ist.#include <cstdlib> #include <iostream> #include <stdlib.h> #include <time.h> #include <windows.h> using namespace std; //Random-Zahl erzeugen int getRandom(int SpielFeldGroesse) { int i = rand()%SpielFeldGroesse; //Erzeugt eine Random-Zahl zwischen 0 und 19 return i; } char getAlphabet(int i) { char Alphabet[]="ABCDEFGHIJKLMN"; return Alphabet[i]; } int main(int argc, char *argv[]) { /*time_t now = time(0); //Zeit in Sekunden seit 1 Januar 1970 char *dt = ctime(&now); //Konvertierung der Zeit in String mit Monat Tag etc. cout << dt << endl;*/ srand(time(0));//Damit für den Random-Algorithmus immer ein neuer Zahlenwert zur Verfügung steht int SpielFeldGroesse=13; int AmountOfShips=3; int AmountOfShots=50; int ComputerNumbers[3]; char ComputerLetters[3]; int PlayerNumbers[3]; char PlayerLetters[3]; int TargetNumber[AmountOfShots]; char TargetLetter[AmountOfShots]; int i; //Random Computer-Schiffe festlegen for(i=0;i<AmountOfShips;i++) { ComputerNumbers[i]=getRandom(SpielFeldGroesse); ComputerLetters[i]=getAlphabet(getRandom(SpielFeldGroesse)); } cout << ComputerNumbers[0] << endl << ComputerNumbers[1] << endl << ComputerNumbers[2] << endl; //Check-Ausgabe cout << ComputerLetters[0] << endl << ComputerLetters[1] << endl << ComputerLetters[2] << endl; //Check-Ausgabe //Spieler Erst-Eingabe for(i=0;i<AmountOfShips;i++) { cout << "Geben Sie die Position ihres " << i+1 << "ten Schiffes ein [A-N][0-13]: " << endl; cin >> PlayerLetters[i] >> PlayerNumbers[i]; } cout << "Ihre Schiffspositionen lauten: " << endl; //Spieler-Ausgabe for(i=0;i<AmountOfShips;i++) { cout << PlayerLetters[i] << PlayerNumbers[i] << endl; } do { cout << "Geben Sie ihr Schussziel an: " << endl; cin >> TargetLetter[i] >> TargetNumber[i]; if((TargetLetter[i] == ComputerLetters[i]) && (TargetNumber[i] == ComputerNumbers[i])) { cout << "Treffer!!"<<endl; ComputerLetters[i] = NULL; } }while((ComputerLetters != NULL) || (PlayerLetters != NULL)); system("PAUSE"); return EXIT_SUCCESS; }Und die Einrückung, die Du hattest, war schon ein wenig komisch. Unter Profis wäre die sogar unhöflich gewesen.
Ab besten immer mal wieder und anfangs immer vor dem Posten kurz von der IDE richten lassen. Bei Code::Blocks der Menupunkt "Format using AStyle".
-
Gewöhn dich an einen solchen Ton in Programmiererforen. Da gehts rabiater zu als bei Mama aufem Schoß

Wie du deinen Code einrückst oder nicht, das hat keinen semantischen Unterschied. Dem Compiler ist Schönheit und Übersichtlichkeit egal, dafür ists ein Programm.
Aber ein Mensch hat's weit schwerer. Fremde, die deinen Code noch nicht gesehen haben, finden langsamer und schlechter hinein. Oder werden sogar ganz abgeschreckt und schauen erst gar nicht rein.
Und irgendwann kommst auch du an den Punkt, wo du dich mal eben verliest und vertust, und dann setzt du eine Klammer falsch. Und das wird nicht immer einen Compilerfehler geben. Und dann wirst du merken: "Oh schaise, wo ist mein Fehler? ich hab doch alles richtig gemacht."
-
Und die Einrückung, die Du hattest, war schon ein wenig komisch. Unter Profis wäre die sogar unhöflich gewesen.
Ab besten immer mal wieder und anfangs immer vor dem Posten kurz von der IDE richten lassen. Bei Code::Blocks der Menupunkt "Format using AStyle".
Werde ich beim nächsten Mal beachten, danke !!
-
Skym0sh0 schrieb:
Gewöhn dich an einen solchen Ton in Programmiererforen. Da gehts rabiater zu als bei Mama aufem Schoß

Wie du deinen Code einrückst oder nicht, das hat keinen semantischen Unterschied. Dem Compiler ist Schönheit und Übersichtlichkeit egal, dafür ists ein Programm.
Aber ein Mensch hat's weit schwerer. Fremde, die deinen Code noch nicht gesehen haben, finden langsamer und schlechter hinein. Oder werden sogar ganz abgeschreckt und schauen erst gar nicht rein.
Und irgendwann kommst auch du an den Punkt, wo du dich mal eben verliest und vertust, und dann setzt du eine Klammer falsch. Und das wird nicht immer einen Compilerfehler geben. Und dann wirst du merken: "Oh schaise, wo ist mein Fehler? ich hab doch alles richtig gemacht."
Da hast du Recht was den Code und das Einlesen betrifft! Mit der Mama muss ich dir vll widersprechen ! hehe
LG
-
Ich hab mal einen hilfreichen Plan hochgeladen, damit man sieht, welche Klammern zu welchen gehören.
http://www.youscreen.de/mrhofmez31.jpg
-
MikeTheT schrieb:
Ihr könnt ihr gerne sagen was ich besser machen soll, ihr kennt euch sicher besser aus als ich ! Aber wie, ist mir sehr wichtig... LG und bitte um weitere Hilfestellungen
Habe ich ja gemacht. Sogar mit Begründung.
Dein eigentliches Problem ist aber ein anderes.
Wie sieht es damit aus.
-
DirkB schrieb:
Dein eigentliches Problem ist aber ein anderes.
Wie sieht es damit aus.DirkB schrieb:
Dein eigentliches Problem ist aber ein anderes.
Wie sieht es damit aus.do { cout << "Geben Sie ihr Schussziel an: " << endl; cin >> TargetLetter[i] >> TargetNumber[i]; cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); if((TargetLetter[i] == ComputerLetters[i]) && (TargetNumber[i] == ComputerNumbers[i])) { cout << "Treffer!!"<<endl; ComputerLetters[i] = NULL; } cout << TargetLetter[i]; }while((ComputerLetters != NULL) || (PlayerLetters != NULL));Hallo Dirk, schau bitte in die IF-Schleife..ich bilde mir ein, dass ich hier ComputerLetters[i] auf NULL setze..bin mir aber nicht sicher ob es so funktioniert... auch ob der Ausdruck in der while schleife so funktioniert/richtig ist... das problem und wie es sich zeigt hab ich ganz am anfang schon erklärt.. LG Michi ..so jetzt müsste es auch deutlich besser zu lesen sein LG
-
Schau dir doch mal die while-Bedingung ganz genau an.
-
um es noch genauer zu machen. Was ist der Unterschied zwischen ComputerLetters und ComputerLetters[i]?
-
Hallo, ich glaube der Fehler liegt schon davor irgendwo.. lasse ich mir in der While mittels :
cout << TargetLetter[i] << ComputerLetters[i] << endl << TargetNumber[i] << ComputerNumbers[i] << endl;Die Werte anzeigen, zeigt er mir für ComputerLetters[i] gar nichts an und für ComputerNumbers[i] 224 die ganze zeit..obwohl es eine Zahl zwischen 0 und 13 sein sollte LG
Ich habe vermutet das wenn ich CumputerLetters != Null setze, das ganze Array damit interpretiert wird, und ich nicht jedes einzelne per Adresse angeben muss.. LG Mike
-
Nochmal.
Welchen Typ hat ComputerLetters
und welchen ComputerLetters[i]
-
Braunstein schrieb:
Nochmal.
Welchen Typ hat ComputerLetters
und welchen ComputerLetters[i]Hallo einen Fehler hab ich schon...es gibt natürlich kein i in der do-while-schleife..wodurch er irgendwelche Werte hat ist eh klar...
Das eine ist ein Typ Char das andere ein Typ Char-Array falls du darauf hinaus willst. LG