[Anfängerfrage] Problem bei Benutzereingabe

Lesterdor

Erfahrenes Mitglied
Hallo liebe Tutorials.de-Community,

Mein Username ist Lesterdor und ich bin, wie ihr sicherlich anhand der Post erkennen könnt, ziemlich neu hier im Forum. Meine Posts habe ich im Programming BASIC gesammelt ;)

Wie das Forum sicherlich schon zu erkennen gibt, habe ich mich mit C++ befasst, allerdings erst seit gestern. Heute habe ich angefangen, die gelernte Theorie etwas umzusetzen und mich vertrauter mit c++ zu machen.

Ich benutze den DEV C++ Editor Version 4.9.9.2:
Ich habe mich mit der Eingabe und Ausgabe über die Konsole befasst, was auch weitesgehend gelungen ist, nur bei einer Sache komme ich nicht weiter:

Wie ihr dem unten stehenden Code entnehmen könnt, habe ich ganz simple Dinge wie Namensabfragen gemacht (Der Benutzer tippt den Namen ein und die Konsole gibt sie wieder aus).

Problem:
Ich möchte, wenn der Benutzer z. B. score eingibt, dass die Konsole den Integer points ausgibt, aber nur eben bei dem Befehl score.

C:
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    string username, enemy;
    int points=12;
   cout << "Guten Tag Fremder, verrate mir doch bitte einmal deinen Namen: \n";
   cin >> username;
   system ("cls");
   cout << "Hallo "<< username <<endl;
   cout << username <<", wie lautet der Name Ihres Gegenspielers? \n";
   cin >>enemy;
   system ("cls");
   cout <<"Alles Klar, "<< username <<" spielt gegen "<< enemy <<" viel Erfolg!\n";
 cin >> 'score';
cout<<"Du hast "<<points<<" Punkte."<<endl;
   getch();
  
}
Ich hoffe, dass ihr mir helfen könnt und mir vielleicht auch den einen oder anderen Tipp geben könnt, wie ich den Code sparsamer zusammenfassen kann zum Beispiel, welche Includes bei dem Programm gar nicht gebraucht werden oder so.

Mit freundlichen Grüßen

Lesterdor
 
Ließ sich das Compilieren?
Würde mich wundern.
Du machst das so:
Du nimmst mit cin die eingabe an, wie obendrüber auch und speicherst das am besten in ein std::string.
in der nächsten Zeile überprüfst du mit einem If ob das wort score war, wenn ja gebs aus, sonst nicht.

C++:
std::string eingabe;
eingabe.clear();
cin >> eingabe;
if(eingabe == "score"){
  cout << score;
}
 
Zuletzt bearbeitet von einem Moderator:
Guten Abend Ryu1991,

zuerst einmal vielen Dank für deine Hilfe, es funktioniert jetzt, wie gedacht ;)

Natürlich hat der Compiler bei meinem Anfangscode Fehlermeldungen ausgegeben, aber ich habe den Fehlercode einfach gepostet, da ich schon vorher andere Möglichkeiten versucht habe es selbst hinzubekommen.

Eine Sache ist mir bei dem Code noch aufgefallen:

Die Zeile
C:
int points = 0+1;

akzeptiert der Compiler, wenn ich aber die vereinfachte Variante nehme, die auch in den Tutorials genannt wird, woher der Name C++ kommt, meckert mein Compiler:
C:
int points += 0;
Fehlermeldung: expected primary-expression before "int"

Kannst du mir das bitte erklären?

Mit freundlichen Grüßen

Lesterdor
 
Hi.
akzeptiert der Compiler, wenn ich aber die vereinfachte Variante nehme, die auch in den Tutorials genannt wird, woher der Name C++ kommt, meckert mein Compiler:
C:
int points += 0;
Diese Variante wird sicherlich in keinem Tutorial genannt.

Du definierst (Namens- und Typvereinbarung) hier gerade eine Variable. Diese Variable ist also gerade dabei zu existieren, und du versuchst genau in diesem Moment die Variable zu initialisieren indem du zum alten Wert der Variablen 0 hinzuaddierst.

Das ist aus 2 Gründen Unfug:

1. Die Variable hat noch gar keinen Wert
2. 0 hinzuzuaddieren ändert nichts am Wert der Variablen.

C++:
int points = 5;

points += 5; // das geht
points = points + 5; // und das ist äquivalent zu der Zeile zuvor
Gruß
 
Hallo deepthroat,

danke für deine Hilfe, du hattest natürlich Recht, so stand es nicht im Tutorial, sondern so, wie du es beschrieben hast ;).

Ich habe noch eine kleine Frage und hoffe, dass sie wieder jemand beantworten kann:

Ich habe jetzt ein kleines Zahlenspiel erstellt, der Anwender hat 3 Versuche, eine Zahl zwischen 1 und 10 zu erraten. Mein Problem ist aber, dass sich das Konsolenfenster immer nach der letzten Aktion schließt.

Also falls der Anwender die Zahl beim ersten Mal errät, kommt cout "Super". Falls der erste Versuch falsch ist kommt "Leider falsch, du hast noch ... von 3 Versuchen", dann schließt sich das Fenster.

Problem ist ja, dass der Benutzer 3 Versuche hat und sich die Konsole aber nach dem ersten Fehlversuch schließt.

C:
//Includes einlesen
#include <iostream>
#include <string>

//Namespace std für cout
using namespace std;
//Programm:
int main()
{
    //Variablen setzten:
    string username;
    int zahl = 6; // Zu ratende Zahl
    int zahl_try = 0; // Eigegebene Zahl vom Benutzer
    int counter = 3; // Versuchszähler
    //Start:
    cout<<"Geben Sie bitte Ihren Namen an:"<<endl;
    cin>>username;
    cout<<"\nHallo "<<username<<", Ich moechte ein Spiel mit Ihnen spielen. \nSie haben gleich 3 Versuche, um eine Zahl zwischen 1 und 10 zu erraten"<<endl;
    cout<<"\n\nTeile mir doch jetzt bitte deinen 1. Tipp mit: ";
    cin>>zahl_try;
    if (zahl_try==zahl)
    {
     cout<<"Richtig, super\n";
     }
     else 
     {
     counter= counter-1;  
     cout<<"\n\nLeider falsch, versuche es bitte noch einmal.\nDu hast noch "<<counter<<" von 3 Versuchen"<<endl;
     }
 if (counter==0)
 {
  cout<<"Du hast leider nun deinen 3. Versuch verbraucht.";
  }
  system("Pause");
  return 0;  
}
 
Hiho schonmal über eine Schleife nach gedacht oder dich damit geschäftigt?
Nein, dann ist jetzt der Zeitpunkt gekommen ;).

Code:
//Includes einlesen
#include <iostream>
#include <string>
 
//Namespace std für cout
using namespace std;
//Programm:
int main()
{
    //Variablen setzten:
    string username;
    int zahl = 6; // Zu ratende Zahl
    int zahl_try = 0; // Eigegebene Zahl vom Benutzer
    //Start:
    cout<<"Geben Sie bitte Ihren Namen an:"<<endl;
    cin>>username;
    cout<<"\nHallo "<<username<<", Ich moechte ein Spiel mit Ihnen spielen. \nSie haben gleich 3 Versuche, um eine Zahl zwischen 1 und 10 zu erraten"<<endl;
    
	
	for(int i=0; i<3; i++) // i ist nun dein Versuchszähler
	{
		cout<<"\n\nTeile mir doch jetzt bitte deinen "<<i+1<<". Tipp mit: ";
		cin>>zahl_try;
		if (zahl_try==zahl)
		{
			cout<<"Richtig, super\n";
		}
		else
		{  
			cout<<"\n\nLeider falsch, versuche es bitte noch einmal.\nDas war der "<<i+1<<". von 3 Versuchen"<<endl;
		}
	}

		cout<<"Du hast leider nun deinen 3. Versuch verbraucht.";

  system("Pause");
  return 0;  
}
Teste auch mal ander schleifen while und do while schleife
 
Hallo 3Cyb3r,

danke für die Hilfe, klappt super :) .Allerdings habe ich ein letztes Problem in diesem Projekt und bekomme keine Lösung hin:

Wenn der Benutzer beim 3. Versuch die richtige Zahl errät, kommt zwar die Ausgabe "Richtig, super", aber ebenfalls wird "Du hast leider nun deinen 3. Versuch verbraucht" ausgegeben.

Ich brauche also eine Abfrage, die überprüft, ob der 3. Versuch richtig ist und dann nur "Richtig, super" ausgibt. Meine Ansätze funktionieren nicht, ich hoffe, ihr könnt mir noch einmal helfen.
 
leg doch einfach ein boll variable an
Code:
bool right=false;
welche du in der if ,falls es richtig war auf true setzt.
und am schluss
Code:
if (!right)
 
@ deepthroat
Das stimmt nicht!
Die Varible hat eine Wert nur da steht irgend ein Bullshit drin.
Man kann bei der Initialisierung einer Variable nicht auf diese Variable zugreifen, da sie eben noch gar nicht existiert. Wie sollte die Variable an der Stelle dann einen Wert haben?! ;-]

Wenn man die Variable nicht initialisiert, dann hat sie einen zufälligen Wert. Dann existiert sie aber auch. Nicht-existierende Variablen haben keine Werte.

Gruß
 
Zurück