Verbesserung/Hilfe C++

02/23/2012 16:04 Dr?Acula#1
Hallo,
da ich noch ein C++ neuling bin und das gefühl habe das ich umständlich viel schreibe obwohl es kürzer ginge, wollte ich euch fragen ob ihr mir bei der verbesserung helfen könnt.

Um in C++ einzusteigen benutzte ich das schritt für schritt einarbeiten, Hilfen beziehe ich dabei aus Google, wenn ich was nicht weiß.
Aber dort kann ich ja sowas nicht nachgucken.

Also mein code bisjetzt :
Code:
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;



int main()
{
	string Charaktername, Junge, Maedchen;
	char Charakterklasse, Geschlecht, AA;

	cout <<"Herzlich Willkommen zu meinem kleinen Programm.\n\n";
	cout <<"Dann fangen wir mal an, wie moechten Sie Heissen ?\n\n";
	cin >> Charaktername;
	system("cls");

	cout <<"Was für eine Charakterklasse moechten sie wählen ?\n";
	cout <<"(O)rg\n";
	cout <<"(M)ensch\n";
	cout <<"(T)roll\n";
	

do
{
	cin >>Charakterklasse;
	
	switch(Charakterklasse)
	{
		case('O'):
		case('o'):
		system("cls");
		break;

		case('M'):
		case('m'):
		system("cls");
		break;

		case('T'):
		case('t'):
		system("cls");
		break;

		default:
		system("cls");
		cout <<"Sie haben eine ungueltige eingabe betaetigt\n";
		cout <<"Sie koennen nur die in (Klammern) geschriebenen Buchstaben benutzen !!\n";
		cout <<"Bitte wiederholen sie ihr Eingabe\n\n\n";
		cout <<"Was für eine Charakterklasse möchten sie waehlen ?\n";
		cout <<"(O)rg\n";
		cout <<"(M)ensch\n";
		cout <<"(T)roll\n";
		break;
	}
}
while(Charakterklasse != 'O' && Charakterklasse != 'o' && Charakterklasse != 'M' && Charakterklasse != 'm' && 
	Charakterklasse != 'T' && Charakterklasse != 't');
	

	cout <<"Sind Sie ein (J)unge oder ein (M)aedchen ?\n\n";
do
{	
	cin >> Geschlecht;

	switch(Geschlecht)
	{
		case('J'):
		case('j'):
		system("cls");
		break;

		case('M'):
		case('m'):
		system("cls");
		break;

		default:
		system("cls");
		cout <<"Sie haben eine ungueltige eingabe betaetigt\n";
		cout <<"Sie koennen nur die in (Klammern) geschriebenen Buchstaben benutzen !!\n";
		cout <<"Bitte wiederholen sie ihr Eingabe\n\n\n";
		cout <<"Sind Sie ein (J)unge oder ein (M)aedchen ?";
		break;
	}
}
while(Geschlecht !='J' && Geschlecht !='j' && Geschlecht !='M' && Geschlecht !='m');

cout <<"Bitte ueberpruefen sie ihre Angaben\n\n";
cout <<"Ihr Name " <<Charaktername <<"\n";		// Hier wird der name normal wiedergegeben weil man den namen in cin eingibt
cout <<"Ihr Klasse " <<Charakterklasse <<"\n";   // Hier soll nicht O, E oder M kommen sondern "Org", "Elf" oder "Mensch"
cout <<"Ihr Geschlecht " <<Geschlecht <<"\n\n";	// Hier das selbe mit "Junge" oder "Maedchen"...
cout <<"Sind Ihre Angaben korrekt ? \nJa (1)\nNein (2)\n\n";
cin >>AA;

if(AA=1)
{
	cout <<"jipidipiduuuuuu, dann kann der spass ja beginnen !!!\n\n\n\n\n\n\n\n\n";
}
else
{
	cout <<"Wenn ihre Angaben nicht Korrekt sind, starten sie das Programm neu\n\n\n\n\n\n\n\n\n";	
}


return 0;
}
Das soll mal eine kleine Konsolenanwendung sein ohne großen schnick schnack :)
So, das war das erste.

Und nun möchte ich fragen, da ich schonmal Poste, wie kann ich die stings so verändern, das wenn z.b. abgefragt wird...
Code:
	string Charaktername, Junge, Maedchen;
	char Charakterklasse, Geschlecht, AA;

	cout <<"Herzlich Willkommen zu meinem kleinen Programm.\n\n";
	cout <<"Dann fangen wir mal an, wie moechten Sie Heissen ?\n\n";
	cin >> Charaktername;
	system("cls");

	cout <<"Was für eine Charakterklasse moechten sie wählen ?\n";
	cout <<"(O)rg\n";
	cout <<"(M)ensch\n";
	cout <<"(T)roll\n";
do
{
	cin >>Charakterklasse;
	
	switch(Charakterklasse)
	{
		case('O'):
		case('o'):
		system("cls");
		break;

		case('M'):
		case('m'):
		system("cls");
		break;

		case('T'):
		case('t'):
		system("cls");
		break;

		default:
		system("cls");
		cout <<"Sie haben eine ungueltige eingabe betaetigt\n";
		cout <<"Sie koennen nur die in (Klammern) geschriebenen Buchstaben benutzen !!\n";
		cout <<"Bitte wiederholen sie ihr Eingabe\n\n\n";
		cout <<"Was für eine Charakterklasse möchten sie waehlen ?\n";
		cout <<"(O)rg\n";
		cout <<"(M)ensch\n";
		cout <<"(T)roll\n";
		break;
	}
}
while(Charakterklasse != 'O' && Charakterklasse != 'o' && Charakterklasse != 'M' && Charakterklasse != 'm' && 
	Charakterklasse != 'T' && Charakterklasse != 't');
Das ich bsp. "T" eingebe, "Charakterklasse" aber nicht "T" wird, sondern "Troll"
das am ende bei der Abfrage auch "Troll" steht und nicht "T"... so wäre es nämlich jetzt. Ich hab danach gesucht, weiß aber nicht wonach ich genau suchen soll, meistens kommt dann was anderes.

Und die letzte Sache, die ich auch so nebenbei, aber jetzt nicht so dringend.
Wie kann ich jetzt aus dieser Datei andere Dateien öffnen, oder diese Sachen in einem Separaten Ordner Speicher und wieder abrufen ?



Sind jetzt nicht so die mega Sachen, aber für mich als neuling kompliziert.


Mit freundlichen Grüßen,
Dr?Acula
02/23/2012 16:11 jacky919#2
Code:
#include <stdio.h>
Wofür?
02/23/2012 16:13 Dr?Acula#3
Für system("cls"), zumindest hatte ich das so aus einem Tut heraus verstanden...



*Edit

Ok, hab mal "#include <stdio.h>" raus gemacht, geht trotzdem alles ;)

'thx
02/23/2012 16:16 jacky919#4
system sollte man nicht nutzen.
02/23/2012 16:20 Dr?Acula#5
Und was stattdessen ?

Es soll ja ein leeres screen kommen, wo nur das "wichtige" steht...
02/23/2012 16:25 xNopex#6
Nja Konsole leeren, gibts in dem Sinn nicht. Soweit ich weiß überschreibt auch der System("cls") Aufruf nur alles mit Leerzeichen. Sowas kann man sich aber auch selbst schreiben. Nur dann bist du immer auch ein Wenigs abhängig vom Betriebssystem. Wie man es unter Windows machen könnte zeigt folgender Artikel:
[Only registered and activated users can see links. Click Here To Register...]

Weitere hilfreiche Console-Functions unter Windows:
[Only registered and activated users can see links. Click Here To Register...]
02/23/2012 16:47 jacky919#7
Ich würde statt den ganzen Bedingungen in den do-Schleifen ehr soetwas verwenden:
02/23/2012 17:10 Dr?Acula#8
Ok, erstmal danke :)

Wie kann ich denn bei deinem Beispiel machen das bei der eingabe von J oder halt M am ende ein "Junge" oder ein "Mädchen" steht ?
02/23/2012 17:18 jacky919#9
Meinst du so:
02/23/2012 17:45 Dr?Acula#10
Ok, hab noch ne frage...

Aber erstmal die Situation, ich hab an meinem "Programm" weitergeschrieben und versucht die rand() bez. srand() funktion rein zu bringen.
Aber iwi funktioniert das ganze nicht so wie ichs haben will ;)

Könnt ihr mir da nochmal helfen ?

Hier der code, hab mit Komentaren versucht kurz und knapp zu erklären was Sache ist :
Code:
int Leben, Geld, Entscheidung, VerlustG; 
Leben = 100;
Geld = 100;

cout << "Sie haben " << Leben << " Leben und " << Geld << " Goldmünzen... \n\n\n" ;
cout << "Sie gehen durch den Wald, an einer Lichtung kommt ein Gnom zu ihnen und Fordert sie herraus, was wollen sie nun tun ? \n\n" ;
cout << "(A)ngreifen ! \n" ;
cout << "(F)liehen ! \n\n\n\n" ;

cin >> Entscheidung;

switch(Entscheidung)
{
	case('A'):
	case('a'):
	cout << "Der Kampf beginnt";
	Sleep(3000);
	system("cls");
	break;				// Hier kommt später noch mehr hinzu

	case('F'):			// Das ist jetzt die wichtige ecke
	case('f'):
	do          
		{
			int y;
			srand( (unsigned)time( NULL ) ); /*Initialisierung mit der Systemzeit*/
			VerlustG = rand()%100;  //Umrechnen der Zahlen
			y = rand()%10;
			VerlustG *= y ;
			printf( " %6d\n", VerlustG);
		}
	while(VerlustG < 10 || VerlustG > 50);

	cout << "\n\n";
	Geld -= VerlustG;		//Soll am ende eine Zahl zwischen 10 und 50 werden, durch die obige "do" schleife
	cout << "Sie entscheiden sich davon zu laufen und verlieren dabei " << VerlustG <<" Silbermünzen";
	break;
}
Follgende Bibliotheken hab in eingebunden, falls man das so sagen kann :
Code:
#include <iostream>
#include <string>
#include <Windows.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
Die hab ich eig. so aus Tut's und hilfen aus dem Web übernommen.

Dieser Abschnitt soll einfach den Sinn haben, dass wenn man Flieht (F drünkt) eine bestimmte anzahl an Silbermünzen verliert.
Das soll Zufällig generiert werden, deswegen die rand() funktion.

Aber iwi klappt das ganze noch nicht so ganz :mad:
02/24/2012 00:55 .SkyneT.#11
Hier einmal eine kleine Hilfestellung:
Code:
	unsigned int Verlust; 

	srand( (unsigned)time( NULL ) ); 
	Verlust = rand() % 40 + 10; //Hier wird eine Zufallszahl zwischen 10 - 50 generiert. (Rechenoperationen sollten nachvollziehbar sein ;) )
	printf("Verlust : %d\n", Verlust);
Gebraucht wird:
stdio.h
time.h
windows.h
02/24/2012 07:08 käsekuchen11elf#12
Quote:
Originally Posted by .SkyneT. View Post
Hier einmal eine kleine Hilfestellung:
Code:
	unsigned int Verlust; 

	srand( (unsigned)time( NULL ) ); 
	Verlust = rand() % 40 + 10; //Hier wird eine Zufallszahl zwischen 10 - 50 generiert. (Rechenoperationen sollten nachvollziehbar sein ;) )
	printf("Verlust : %d\n", Verlust);
Gebraucht wird:
stdio.h
time.h
windows.h
Hm, also zum Einen liegt rand() % 40 + 10 im Intervall [10..49], zum anderen sind deine angegebenen Includes etwas holprig.
Da es hier um C++ geht, würde ich statt dem printf() call std::cout benutzen, demnach muss der stdio.h header nicht eingebunden werden.
Ähnliches gilt für time.h. Da wir uns in C++ befinden, heißt der einzubindende header <ctime>. Und ich sehe gerade spontan nicht, an welcher Stelle der von dir gepostete code den windows.h header verwendet.

viele Grüße,
cheesecake
02/24/2012 13:15 Dr?Acula#13
Quote:
Originally Posted by käsekuchen11elf View Post
Und ich sehe gerade spontan nicht, an welcher Stelle der von dir gepostete code den windows.h header verwendet.

Das ist ja nur ein ausschnitt, davor hab ich noch mehr stehen ;)


Und danke an die Antworten, ich werde es gleich sofort mal einauen...
02/24/2012 14:35 .SkyneT.#14
Quote:
Originally Posted by käsekuchen11elf View Post
Hm, also zum Einen liegt rand() % 40 + 10 im Intervall [10..49], zum anderen sind deine angegebenen Includes etwas holprig.
Da es hier um C++ geht, würde ich statt dem printf() call std::cout benutzen, demnach muss der stdio.h header nicht eingebunden werden.
Ähnliches gilt für time.h. Da wir uns in C++ befinden, heißt der einzubindende header <ctime>. Und ich sehe gerade spontan nicht, an welcher Stelle der von dir gepostete code den windows.h header verwendet.

viele Grüße,
cheesecake
C/C++ ... hab nicht genau geschaut :rolleyes:

Ja beim Windows.h Header war ich mir am Anfang auch nicht sicher...
Aber ich kanns dir ja gerne veranschaulichen :D

In seinem Fall würde man natürlich einfach iostream nehmen, dann spart man
sich andere header, außerdem wird´s auch noch für std::cout gebraucht :D

PS: Das ganze sollte auch nur eine Hilfestellung zu der Zufallszahl darstellen, die
der TE vorher "Erzwingen" wollte ...
02/24/2012 14:36 LaAngelika#15
thx für das tutorial