C++ Calculator Problem beim Programmieren.

Stevie04

Lt. Junior Grade
Registriert
März 2010
Beiträge
329
Hallo,
ich hab mal vor kurzem angefangen etwas c++ zu lernen. Nun hab ich nach einem geeigneten Projekt gesucht. Hab mir dannn gedacht, dass ich vllt sowas wie nen Xp Calculator für ein Spiel erstelle, in dem man Panzer durch XP freischalten kann.
Ich plane zuerst mal, dass das Programm über die Windows Konsole läuft.
Das Programm soll wie folgt funktionieren:
Eingabe des Startpanzers->Eingabe des Zielpanzers-> Xp Zahl, die aus der Differenz der beiden Panzer berechnet wird
Bsp:
Pz2(132 XP)->Pz3(323 XP)->191 XP

Die Panzer werden in das Programm eingespeichert z.B Pz2=132 XP
Nun hab ich nen Problem:
Ich will zuerst den Startpanzer eingeben, dann den Zielpanzer und dann soll das Ergbnis rauskommen. Leider weiß ich nicht wie das klappen soll mit der Programmierung.
Hab hier mal den Code:
Code:
//XP Calculator
#include "stdafx.h"
#include "iostream"               


using namespace std;               


int main() 

{
        int schluss;
        double Pz1;
                   Pz1=0;
        double Pz2;
                   Pz2=132;
        double Pz3;
               Pz3=323; // hier werden die Panzer+deren XP Zahlen eingespeichert

        cout << "Bitte geben Sie den Startpanzer ein!" ;

        cin >>   ; // hier startpanzer eigeben z.B. Pz1

        cout << "Bitte geben Sie den Zielpanzer ein!" ;

        cin >>   ; // hier zielpanzer eingeben z.B. Pz2

        cout <<  << "-" <<  << "="  ; // eingabe nr.1 - eingabe nr.2 = XP Zahl bzw. Differenz, aber wie mache ich das?

        cout << "Beliebige Taste dann enter zum Beenden drucken";

        cin >> schluss; 
        cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cin.get(); 

return 0;                    

}


kann mir da jemand helfen? würde mich über hilfe freuen.

MfG Stevie
 
hi
sollte das nicht cin >> variable; heissen?
sonst liest du ja ins null hinein daher landet es nirgendswo

cin >> Pz1 ; // hier startpanzer eigeben z.B. Pz1
 
Bin jetzt nicht ganz fit in C++ beschäftige mich eher mit PHP und VB, allerdings sind ide Unterschiede in den Sprachen ja nicht so weltbewegend.

Wenn ich es richtig verstanden habe, gibt der Nutzer z.B. pz1 dort ein und im Anschluss z.B. pz2 und dann soll die Diferenz der beiden Werte der Panzer berechnet werden.

Schau dir dafür mal diesen Link an, der sollte dir weiterhelfen_ http://www.willemer.de/informatik/cpp/cppdefin.htm

Damit setzt du eine Konstante, die für bestimmte Werte stehen, so könntest du z.B. pz1 den Wert 0 zuweisen, sodass du direkt mit den Benutzerangaben arbeiten kannst, als Alternative wäre noch die switch - Funktion oder ein if, elseif, else Konstrukt, was mir spontan einfallen würde.
 
Code:
//XP Calculator
#include "stdafx.h" //hast du dieses denn schon geschrieben? was soll dort passieren?
#include "iostream"               


using namespace std;               


int main() 

{
        //int schluss;
        double Pz1=0;
        double Pz2=123;
        double Pz3=323;// hier werden die Panzer+deren XP Zahlen eingespeichert

        cout << "Bitte geben Sie den Startpanzer ein!" ;

        cin >>  Pz1; // hier startpanzer eigeben z.B. Pz1

        cout << "Bitte geben Sie den Zielpanzer ein!" ;

        cin >>  Pz2; // hier zielpanzer eingeben z.B. Pz2

		Pz3=(Pz1-Pz2);

        cout <<  Pz1 << "-" << Pz2  << "=" << Pz3; // eingabe nr.1 - eingabe nr.2 = XP Zahl bzw. Differenz, aber wie mache ich das?

		cout << "Beliebige Taste dann enter zum Beenden drucken \n";
		
/*Persöhnlich keine ahnung was du da machen willst:*/


//      cin >> schluss; 
//     cin.clear();
//cin.ignore(cin.rdbuf()->in_avail());
//cin.get(); 

return 0;                    

}


so vielleicht
Ergänzung ()

wenn du willst das die diferenz immer positiv ausgegeben wird kannst nach
Pz3=(Pz1-Pz2);
sowas wie

if (Pz3<0)
Pz3=Pz3*(-1);

hinzaubern xD
 
hi,
damit überschreibst du aber den wert der variablen
@TE willst du dass man die XP eingibt oder z.B. Pz1 ?
 
ich dass man z.B. Pz1 angibt, dann den Zielpanzer (also z.B. Pz2) und erhält dann die XP zahl.
Ergänzung ()

man soll aber auch in der Lage sein z.B. von Pz2 zu Pz3 die Xp zahl bekommen zu können
Ergänzung ()

BlackVip3r schrieb:
Bin jetzt nicht ganz fit in C++ beschäftige mich eher mit PHP und VB, allerdings sind ide Unterschiede in den Sprachen ja nicht so weltbewegend.

Wenn ich es richtig verstanden habe, gibt der Nutzer z.B. pz1 dort ein und im Anschluss z.B. pz2 und dann soll die Diferenz der beiden Werte der Panzer berechnet werden.

Schau dir dafür mal diesen Link an, der sollte dir weiterhelfen_ http://www.willemer.de/informatik/cpp/cppdefin.htm

Damit setzt du eine Konstante, die für bestimmte Werte stehen, so könntest du z.B. pz1 den Wert 0 zuweisen, sodass du direkt mit den Benutzerangaben arbeiten kannst, als Alternative wäre noch die switch - Funktion oder ein if, elseif, else Konstrukt, was mir spontan einfallen würde.

das verstehe ich nicht ganz.könntest du vllt ein Beispiel geben oder meinen code editieren?
 
ah ok, srry nicht soo viel zeit tief zu erklären vielleicht hilfts:
eine klasse machen das den panzernamen(string) und seine xp(longint oder so) zahl beinhaltet
dann machst du ein feld von panzern mit dieser klasse(in der main)

lässt den panzernamen eingeben dann und lässt iwas von wegen "panzer[index].name== eingabe" in einer schleife suchen wenn nicht gefunden dann fehler sonst nächsten panzer eingeben

danach lässt du xp_unterschied=panzer[erster panzer index].xp-panzer[zweiter panzer sein index].xp

dann lässt du die variable xp_unterschied ausgeben


ob das hilft?
 
ja danke für die ausführlich antwort. Ich weiß nur nicht, ob ich das alles in nen code geschrieben bekomm, weil ich erst gestern mit c++ angefangen hab und ich soweit noch nicht bin sorry.
könntest du vllt das in einen code schreiben? wäre nett.
 
hmm jahm eig schon, das ist kein problem, nur grad am lernen auch c++ .)
nur weiß nicht ob dich das dann weiterbringt, schau dir vielleicht erstmal theorie an
datentypen,zeiger+referenzen, strukturen,felder/arrays, klassen, vielleicht noch listen etwa in dieser reinfolge dann weißt du etwa bescheid
den code kann ich schreiben, dauert aber vielleicht, habe viel zu lernen gerade
 
ja schreib ihn einfach mal dann teste ich ihn. muss auch nicht sofort sein. aber je früher desto besser.
aber danke schon mal jedenfalls für deine Hilfe :)
 
Code:
#include <iostream>
#include <string.h>
using namespace std;

const int LEN = 5;

class String {
  public:
  char *s;		   // Zeichenkette
  int Xp;
  String(void)	{s=new char [20];};
};

void main(void)
{
	String panzer[LEN];//hast insgesamt 5 panzer 0.1.2.3 und 4
	String zielpanzer;
	int start,ziel;
	panzer[0].s="p0\0"; panzer[0].Xp=0;
	panzer[1].s="p1\0"; panzer[1].Xp=200;
	
	cout<<"startpanzer eingeben:";
	cin>> zielpanzer.s;

	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{start=i; break;}
	cout<<"zielpanzer eingeben:";
	cin>> zielpanzer.s;
	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{ziel=i;break;}
	panzer[3].Xp=panzer[start].Xp-panzer[ziel].Xp;
	cout<< panzer[3].Xp <<"\n";
}


so heute morgen mal kurz hingesetzt und hingezaubert, ich weiß vielleicht kanns einer anderst oder besser machen wie auch immer xD

ob du daraus schlau wirst?
du kannst halt gerade nur panzer0 und panzer1 nutzen, den schutzmechanismus wenn man falschen panzer eingibt habe ich nicht eingebaut, viel spass .)
falls noch fragen hast...
gruß akra
 
ja danke. habs direkt mal ausprobiert. Hat aber leider nicht funktioniert. Ich hab mehrere Eingabemöglichkeiten ausprobiert (pz0/pz1,panzer[1]/panzer[2],p0\0/p1\0 usw.) hat aber nicht geklappt. Es kam immer eine dieser beiden Fehlermeldungen:
xq82wmb5iws.png

hab ich vllt was falsches eingeben?
Ach ja: Musste noch bevor ich debuggen konnte "#include "StdAfx.h"" eingeben, hat jedenfalls Micrsoft visual c++ 2010 Express gesagt, welches ich benutze...
Ergänzung ()

ja es klappt! hab p0 und p1 eingeben dann ging es! leider wird nur die Xp zahl als Minuszahl ausgegeben...
 
hey
also das programm funktioniert bei mir reibungslos, zurzeit kannst du als panzer:
p0 und/oder p1
eingeben(hätt ich vielleicht dazusagen sollen, falls man das nicht sieht)
ich nutze "Microsoft Visual Studio 2010" da leufts einwandfrei, vielleicht hast du andere bibliotheken oder die sind anderst, bin dort noch nicht so fitt

(wollt hier screenshot reinmachen, aber raff grad nicht wies hier geht, tipp? xD)
_________

ah ok, jahm du kannst diese nach belieben auch mit anderem vorzeichen ausgeben lassen, weiß nicht wie dus gedacht hast
Code:
cout<< (-panzer[3].Xp) <<"\n";
ersetze die vorletzte zeile und es wird dann mit anderem vorzeichen ausgegeben(die variable ist aber immer noch negativ falls was)
 
Zuletzt bearbeitet:
ja geht jetzt auch nur wie mach ich aus der XP Zahl ne positive Zahl??

Edit: hab schon danke!
Ergänzung ()

So, eigentlich funktioniert er jetzt, nur wenn ich die XP von panzer1 zu panzer3 haben will, bekomm ich die XP von Panzer2 zu panzer3 geliefert. Kann man das dann auch so machen, dass man die XP von Panzer2 addiert, wenn man die Xp von Panzer1 zu Panzer3 haben will?
Mein Code soweit:
Code:
#include "StdAfx.h"
#include <iostream>
#include <string.h>
using namespace std;

const int LEN = 5;

class String {
  public:
  char *s;		   // Zeichenkette
  int Xp;
  String(void)	{s=new char [20];};
};

void main(void)
{
	String panzer[LEN];//hast insgesamt 5 panzer 0.1.2.3 und 4
	String zielpanzer;
	int start,ziel;
	panzer[0].s="p1\0"; panzer[0].Xp=0;
	panzer[1].s="p0\0"; panzer[1].Xp=175;
	panzer[2].s="p3\0"; panzer[2].Xp=1135;

	cout<<"Willkommen beim XP Calculator!" "\n";
	cout<<"Bitte geben Sie Ihren Startpanzer eingeben:";
	cin>> zielpanzer.s;

	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{start=i; break;}
	cout<<"Bitte geben Sie ihren Zielpanzer eingeben:";
	cin>> zielpanzer.s;
	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{ziel=i;break;}
	panzer[3].Xp=panzer[start].Xp-panzer[ziel].Xp;
	cout<< panzer[3].Xp*(-1) << "XP" "\n";
	cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cin.get(); 
}
 
Zuletzt bearbeitet:
naja du hast wohl noch nicht sooo viel mit programmieren allgemein zutungehabt.

du kannst mit programmieren eig alles machen xD
hast du den code verstanden?
iwie kapier ich nicht so ganz was das nun werden soll, ein calculator oder panzerspiel xD

dein erstes anliegen verstehe ich nciht wo da das problem ist oO
wenn du ja iwas addieren willst dann kannst du das ja :

Code:
varibale_ergebnis=variable1+variable2;
machen

und was sind das für letzten 3 zeilen eigentlich bei dir? bzw wozu oO
 
ich verstehe zwar nicht so ganz den sinn der dabei rauskommt aber nagut xD
unterschied von panzer1 zu panzer2 ist ja panzer1-panzer zwei dies musst du in den panzer3 reinspeichern
also z.b. so:

panzer3=panzer3+panzer1-panzer2

musst halt aufpassen wie groß die panzer an sich sind...
 
also das ist mein code:
Code:
#include "StdAfx.h"
#include <iostream>
#include <string.h>
using namespace std;

const int LEN = 5;

class String {
  public:
  char *s;		   // Zeichenkette
  int Xp;
  String(void)	{s=new char [20];};
};

void main(void)
{
	String panzer[LEN];//hast insgesamt 5 panzer 0.1.2.3 und 4
	String zielpanzer;
	int start,ziel;
	panzer[0].s="p0\0"; panzer[0].Xp=0;
	panzer[1].s="p1\0"; panzer[1].Xp=175;
	panzer[2].s="p2\0"; panzer[2].Xp=1135;
	panzer[2].Xp=panzer[2].Xp+panzer[0].Xp-panzer[1].Xp;

	cout<<"Willkommen beim XP Calculator!" "\n";
	cout<<"Bitte geben Sie Ihren Startpanzer ein:";
	cin>> zielpanzer.s;

	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{start=i; break;}
	cout<<"Bitte geben Sie ihren Zielpanzer ein:";
	cin>> zielpanzer.s;
	for (int i=0;i<LEN;i++)//startpanzer aussuchen
		if(strncmp(panzer[i].s,zielpanzer.s,20)==0)
			{ziel=i;break;}
	panzer[3].Xp=panzer[start].Xp-panzer[ziel].Xp;
	cout<< panzer[3].Xp*(-1) << "XP" "\n";
	cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cin.get(); 
}
und es klappt!! :D Danke.
was nur nervig ist, dass ich jetzt für alle darauffolgende Panzer dasselbe machen muss...
 
bin verwirrt xD naja egal
du kannst ja iregend einen algorithmuss ausdenken der dir das leben leicht macht
verstehe immer noch nciht ganz was das im endeffekt machen soll bzw sinn von dem programm xD
 
wenn ich noch nen Porblem haben sollte, melde ich mich. Danke nochmal.
naja bei dem Spiel startet man halt mit nem kleinen Panzer und muss sich bessere per XP freischalten in einem Technologiebaum. Und dieser XP Calculator soll das Rechnen erleichtern bzw. die XP direkt z.B. zum letzten Panzer anzeigen, ohne groß zu rechnen.
 
Zurück
Oben