[c++] Variable checken ob zahl.

moin


Hier ein funktionierender Code:
Code:
#include <iostream>
#include <cmath>
#include <conio.h>
#include <windows.h>

using namespace std;

float umwandeln(char *szString)
{

	for( int i=0; i<strlen(szString); i++)
	{
		if(szString[i] == ',')
		{
			szString[i] = '.';
			continue;
		}

		if(!isdigit(szString[i]))
			return -1;
	}

	return atof(szString);
}


int main (int argc, char *argv[])
{
	char menu;
	while(1)
	{
		system("cls");
		cout << " Konsolen Taschenrechner (c) Fredyy" << endl;
		cout << " 1) Addition"<<endl;
		cout << " 2) Subtration"<<endl;
		cout << " 3) Multiplikation"<<endl;
		cout << " 4) Division"<<endl;
		cout << " 5) Radizieren"<<endl;
		cout << " 6) Potenzieren"<<endl;
		cout << " 7) Ende"<<endl;
		cout << " Bitte geben Sie einen Menuepunkt ein: ";
		cin>>menu;

		switch(menu)
		{
		case '1':
			{
				char sum2[20];
				char sum1[20];

				float x,y;

				cout << "\n  1) Addition"<<endl;
				cout << "     Bitte geben sie den ersten Summanden ein : ";
				cin >> sum1;

				cout << "     Bitte geben sie den zweiten Summanden ein : ";
				cin >> sum2;

				y=umwandeln(sum2);
				x=umwandeln(sum1);

				cout << "\a     Die Summe ist: " << (x+y)<<  endl;
				getch();

				break;
			}
		case '2':
			{
				float min;
				float sub;
				cout << "\n  2) Subtration"<<endl;
				cout << "     Bitte geben sie den Minuend ein : ";
				cin >> min;
				cout << "     Bitte geben sie den Subtrahend ein : ";
				cin >> sub;
				cout << "\a     Die Differenz ist: " << (min-sub) << endl;
				getch();

				break;
			}
		case '3':
			{
				float fak1;
				float fak2;
				cout << "\n  3) Multiplikation"<<endl;
				cout << "     Bitte geben sie den ersten Faktor ein : ";
				cin >> fak1;
				cout << "     Bitte geben sie den zweiten Faktor ein : ";
				cin >> fak2;
				cout << "\a     Das Produkt ist: " << (fak1*fak2) << endl;
				getch();

				break;
			}
		case '4':
			{
				float divi1;
				float divi2;
				cout << "\n  4) Division"<<endl;
				cout << "     Bitte geben sie den Divident ein : ";
				cin >> divi1;
				cout << "     Bitte geben sie den Divisor ein : ";
				cin >> divi2;
				cout << "\a     Der Quotient ist: " << (divi1/divi2) << endl;
				getch();

				break;
			}
		case '5':
			{
				float radi;
				cout << "\n  5) Radizieren"<<endl;
				cout << "     Bitte geben sie den Radikant ein : ";
				cin >> radi;
				if( radi >= 1 )
				{
					float y ;
					y = sqrt( radi ) ;
					cout << "\a     Wurzel der Zahl ist : " << y << endl;
				}
				else
				{
					cout << "\a     Der Radikant darf nicht 0 oder negativ sein."<< endl;
				}
				getch();

				break;
			}
		case '6':
			{
				float base;
				float expo;
				cout << "\n  6) Potenzieren"<<endl;
				cout << "     Bitte geben sie die Basis ein : ";
				cin >> base;
				cout << "     Bitte geben sie den Exponenten ein : ";
				cin >> expo;
				cout << "\a     Die Potenz ist: " << pow(base,expo) << endl;
				getch();

				break;
			}
		default:
			return 0;
		}
	}

	return 0;
}

Ich habe ein paar Änderungen vorgenommen:
1. deine while Abbruchbedingung geändert.
2. deine ganzen ifs durch eine switch-Anweisung ersetzt.
3. dein menu = atoi (szinput); rausgenommen weil überflüssig
4. mein Funktion ist jetzt nicht mehr von Typ int sondern float und gibt auch ein float zurück, so dass auch mit Kommazahlen gerechnet werden kann.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
ganz ganz fettes thx schon mal...
ich glaube ich habe sowei alles verstanden..
nur gibt es jetzt das problem das wenn man im menu etwas anderes als 1-7
ein gibt wird das program direkt beendet es soll aber erst schliessen wenn
man auch 7 ein gibt sonst soll das menu wieder kommen...
das war vorher so und ist jetzt leider nicht mehr da..
und wenn man zum bespiel bei der addition etwas andere eingibt als eine zahl mit genau einem/keinem komma oder punkt soll es eine meldung gebne und man solle es noch mal eingeben müssen.

nochmals ganz ganz ganz fettes danke...
 
moin


Kain Problem packt das hier noch mit ins switch rein:
Code:
case '7':
{
     return 0;
}

Und bei default: nimmst du das return weg und ersetzt es durch ein break;


mfg
umbrasaxzn
 
danke man du bist echt ein c++ gott.. :p :p
kannst du noch mal in dem post oben schauenden hatte ich vorhin noch editiert..
warum bist du so ein gott?
wie lange hast du gelernt und womit? bücher? websiten?

bug detected.. wenn man oben 1,1 + 1.1 rechnet kommt 0.1 raus leicht komsich oder?
 
moin


danke man du bist echt ein c++ gott..
Ja kann man so sagen.
Ne mal im ernst das komplette Programm besteht nur aus Grundlagen der Sprache.

Ich programmiere etwa seit 5 Jahren, mein erstes Buch war "C++ in 21 Tagen" und danach habe ich mir ne Menge Tutorials durchgelesen.


mfg
umbrasaxum
 
weiß du wodran das liegt wenn man 1,1 + 1.1 rechnet kommt 0.1 raus leicht komsich oder?
und wie checke ich durch das die zahl auch nur ein komman/punkt hat und
wenn mehr oder buchstaben drin sind das dann ein fehler
kommt und man den wert noch mal eingeben muss?

achja:
was hälst du von diesem buch?
Grundkurs Software-Entwicklung mit C++
 
moin


Hier meine modifizierte umwandeln Funktion:
Code:
float umwandeln(char *szString)
{

	for( int i=0; i<strlen(szString); i++)
	{
		if(szString[i] == '.')
			continue;

		if(szString[i] == ',')
		{
			szString[i] = '.';
			continue;
		}

		if(!isdigit(szString[i]))
			return -1;
	}

	return atof(szString);
}
Hiernach ist 1,1 + 1.1 gleich 2.2


Der der Fehler überprüfung:
Du kannst gucken ob das was zurückgegeben wurde -1 ist, wenn ja gab es einen Fehler, wenn nein weiter machen.
Z.B.:
Code:
y=umwandeln(sum2);
x=umwandeln(sum1);
if(x == -1 || y == -1)
     cout<<Fehler";


mfg
umbrasaxum
 
Zurück