Counter funktioniert nicht



  • Hallo, ich bin relativ neu, was die Programmiersprache C++ angeht und habe zur Übung heute ein kleines Zahlen erraten Spiel erstellt, so wie jeder wahrscheinlich, der neu in diesem Gebiet war/ist ^^
    Nun hab ich es so gemacht, dass nach jedem Mal, bei dem man eine falsche Zahl eingibt da steht, wie viele Versuche man noch hat und am Ende steht nun aber da, nachdem man alle Versuche aufgebraucht hat, dass man noch 0 Versuche hat und man kann trzdm noch einmal weiter machen.
    Ich finde den Fehler einfach nicht, hoffe jmd kann mir da kurz zur Hand gehen 😕

    #include "pch.h"
    #include <iostream>
    #include<Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    
    int main()
    {
    	int number; //CPU's number
    	int guess; //Players's number 
    	int score = 0;
    	const int totchance = 7;
    	char ans = 'y';
    	int x = 1;
    	int y = 100;
    
    	cout << "Willkommen zum Schätzspiel!" << endl;
    	cout << "Die CPU sucht sich nun eine Zahl aus und du musst versuchen diese zu erraten. Gesucht ist eine Zahl zwischen 1 und 100" << endl;
    
    	srand(time(NULL));
    	number = (rand() % ((y + 1) - x)) + x;
    
    	while (ans == 'y') {
    
    
    
    		cin >> guess;
    		system("cls");
    
    		if (guess<0 || guess>100) {
    			cout << "Nutze bitte eine Zahl zwischen 1 und 100" << endl;
    		}
    		else if (guess < number) {
    			if (score == totchance) {
    				cout << "Leider verloren, vielleicht ja beim nächsten Mal" << endl;
    				cout << "Willst du nochmal spielen? (y/n)" << endl;
    				cin >> ans;
    				if (ans == 'y') {
    					score = 0;
    					system("cls");
    					cout << "Willkommen zum Schätzspiel!" << endl;
    					cout << "Die CPU sucht sich nun eine Zahl aus und du musst versuchen diese zu erraten. Gesucht ist eine Zahl zwischen 1 und 100" << endl;
    
    					srand(time(NULL));
    					number = (rand() % ((y + 1) - x)) + x;
    				}
    			}
    			else {
    				cout << "Deine Zahl war zu klein, bitte suche dir eine größere Zahl aus" << endl;
    				score++;
    				cout << "Verbleibende versuche: " << 7 - score << endl;
    			}
    		}
    		else if (guess > number) {
    			
    			if (score == totchance) {
    				cout << "Leider verloren, vielleicht ja beim nächsten Mal" << endl;
    				cout << "Willst du nochmal spielen? (y/n)" << endl;
    				cin >> ans;
    				if (ans == 'y') {
    					score = 0;
    					system("cls");
    					cout << "Willkommen zum Schätzspiel!" << endl;
    					cout << "Die CPU sucht sich nun eine Zahl aus und du musst versuchen diese zu erraten. Gesucht ist eine Zahl zwischen 1 und 100" << endl;
    
    					srand(time(NULL));
    					number = (rand() % ((y + 1) - x)) + x;
    				}
    				
    			}
    			else {
    				cout << "Deine Zahl war zu groß, bitte suche dir eine kleinere Zahl aus" << endl;
    				score++;
    				cout << "Verbleibende versuche: " << 7 - score << endl;
    			}
    		} else {
    			cout << "Richtig, herzlichen Glückwunsch :)" << endl;
    			cout << "Willst du weiterspielen? (y/n)" << endl;
    			cin >> ans;
    			if (ans == 'y') {
    				score = 0;
    				system("cls");
    				cout << "Willkommen zum Schätzspiel!" << endl;
    				cout << "Die CPU sucht sich nun eine Zahl aus und du musst versuchen diese zu erraten. Gesucht ist eine Zahl zwischen 1 und 100" << endl;
    
    				srand(time(NULL));
    				number = (rand() % ((y + 1) - x)) + x;
    			}
    		}
    	}
    }
    
    MfG Pierre


  • also bei mir funktioniert das programm ganz normal, bis auf die tatsache, dass ich eigentlich 8 versuche habe. falls das dein problem sein sollte, musst du eben berücksichtigen, dass die bedingung "score == totchance" erst nach 8 versuchen (0, 1, 2, 3, 4, 5, 6, 7) erfüllt ist und deine abfrage entsprechend ändern.

    edit: meine überlegung war teilweise falsch. ich darf 8 mal eingeben, aber der 8. wert wird nicht mehr ausgewertet. überdenk mal etwas den programmablauf.



  • Ich habe den Kot nicht wirklich gelesen, aber Du brauchst den Zufallszahlengenerator nicht vor jedem Aufruf von rand() initialisieren (srand()). Einmal zu Programmbegin reicht. <stdlib.h>, <stdio.h> und <time.h> heißen in C++ <cstdlib>, <stdio> und <ctime>. Der Wert für einen Nullpointer in C++ ist schon seit Ewigkeiten nullptr, nicht NULL. ~> std::srand(static_cast<unsigned>(std::time(nullptr)));


Log in to reply