# Sprungmarken in C++???



## Kimble (22. Dezember 2001)

Ich bin grad dabei 'en Mini-Prog zu schreiben:

#include <iostream>

using namespace std;

int multi(int a, int b, int erg)
{
	erg=a*b;
	cout << "Das Ergebnis ist: " << erg << endl;
}

int addi(int i, int j ,int erg2)
{
	erg2=i+j;
	cout << "Das Ergebnis ist: " << erg2 << endl;
}

int divi(int x, int y, int erg3)
{
	erg3=x/y;
	cout << "Das Ergebnis ist: " << erg3 << endl;
}

int main()
{
	int a;

	cout << "====================" << endl;
	cout << "  Choose an option  " << endl;
	cout << "====================" << endl;

	cout << "Waehlen Sie bitte!" << endl;
	cout << "1. Addition" << endl;
	cout << "2. Multiplikation" << endl;
	cout << "3. Division" << endl;

	cin >> a;

	switch(a)
	{
	case 1: cout << "Sie haben 1 gewaehlt" << endl;
		break;
	case 2: cout << "Sie haben 2 gewaehlt" << endl;
		break;
	case 3: cout << "Sie haben 3 gewaehlt" << endl;
		break;
	default: cout << "Siw haben das falsche gewaehlt!" << endl;
		break;
	}
}

Wie kann man bei den case-Stellen Sprungmarken einfügen?
Also z.B. wie bei VB der Goto irgendwas Befehl.
Ich will des dann so machen, dass bei case es zu den einzelnen int Sachen springen soll!
Wie geht des?


----------



## Thomas Kuse (22. Dezember 2001)

```
#include <stdio.h>

void multi(int a,int b){ 
  printf("Das Ergebnis ist: %d\n",a*b); 
} 

void addi(int a,int b){ 
  printf("Das Ergebnis ist: %d\n",a+b); 
} 

void divi(int a,int b) 
{ 
  printf("Das Ergebnis ist: %d",(int)a/b); 
} 

int main() 
{ 
  int a; 

printf( "Waehlen Sie bitte!\n");
printf( "1. Addition\n");
printf( "2. Multiplikation\n");
printf( "3. Division\n); 
scanf("%d",&a); 

int x,y;
  scanf("x:%d\n",&x);
  scanf("y:%d\n",&y);


switch(a) 
{ 
case 1: printf("Sie haben 1 gewaehlt\n");
addi(x,y);
break; 
case 2: printf("Sie haben 2 gewaehlt\n");
multi(x,y);
break; 
case 3: printf("Sie haben 3 gewaehlt");
divi(x,y);
break; 
default: printf("Sie haben das falsche gewaehlt!\n");
break; 
} 
}
```

also dein code dürfte eigentlich nich wirklich gehen. hast du den nur irgendwo abgepinselt?? da war keine eingabe-drin für die werte und ausserdem ist cin und cout keine gute methode des I/O-Streamings.
printf und scanf sind ein wenig schwieriger in der handhabung funktionieren aber auch ordentlich.

hab den code nich ausprobiert, is also ohne gewähr, da ich grad an nem fremden rechner sitze.
viel spass und lass ma die sprungmarken sprungmarken sein. niemand programmiert heutzutage noch professionell damit. ich weiss auch nich wie und wo du die jetzt einsetzen wolltest. (in funktionen reinzuspringen is KEINE gute sache)


----------



## Kimble (22. Dezember 2001)

*geht doch*

hab's geschafft:
geht genauso wie bei VB (un der Code funzt!):
Code:


```
#include <iostream>

using namespace std;

/* Hier beginnt der main-Teil */
int main()
{
	menue:
	{
		int a;

		cout << "====================" << endl;
		cout << "  Choose an option  " << endl;
		cout << "====================" << endl;

		cout << "Waehlen Sie bitte!" << endl;
		cout << "1. Addition" << endl;
		cout << "2. Multiplikation" << endl;
		cout << "3. Division" << endl;
		cout << "4. Subtraktion" << endl;
		cout << "5. Beenden" << endl;

		cin >> a;

		switch(a)
		{
		case 1: goto addi; // springe zu addi
			break;
		case 2: goto multi; // springe zu addi
			break;
		case 3: goto divi; // springe zu divi
			break;
		case 4: goto sub; // springe zu sub
			break;
		case 5: goto ende2; // springe zu ende
			break;
		default: cout << "Siw haben das falsche gewaehlt!" << endl; 
			goto menue;
			break;
		}
	}

addi:
	{
		int j,i,erg2;
		cout << "Geben Sie i ein: ";
		cin >> i;
		
		cout << "\nGeben Sie j ein: ";
		cin >> j;
		
		erg2=i+j;
		cout << "Das Ergebnis ist: " << erg2 << endl;
		
		goto ende;
	}

multi:
	{
		int a,b,erg;
		cout << "Geben Sie a ein: ";
		cin >> a;
		
		cout << "\nGeben Sie b ein: ";
		cin >> b;
		
		erg=a*b;
		cout << "\nDas Ergebnis ist: " << erg << endl;

		goto ende;
	}

divi:
	{
		float x,y,erg3;
		cout << "Geben Sie x ein: ";
		cin >> x;
		
		cout << "\nGeben Sie y ein: ";
		cin >> y;

		if(y==0)
		{
			cout << "\nDivision durch 0 unzulaessig\n" << endl;
			goto divi;
		}
		
		erg3=x/y;
		cout << "Das Ergebnis ist: " << erg3 << endl;

		goto ende;
	}

sub:
	{
		int s,t,erg4;
		cout << "Geben Sie s ein: ";
		cin >> s;
		
		cout << "\nGeben Sie t ein: ";
		cin >> t;
		
		erg4=s-t;
		cout << "\nDas Ergebnis ist: " << erg4 << endl;

		goto ende;
	}

ende:						/* halte an warte auf Tastendruck - return=0 also false */
	{
		system("PAUSE");
		return(0);
	}

ende2:
	{
		return(0);
	}
}
```


----------



## Matthias Reitinger (22. Dezember 2001)

Abgesehen davon, dass der 'goto'-Befehl nicht zu einem guten Programmierstil gehört


----------



## Kimble (23. Dezember 2001)

kann jemand den Code von oben mal ummodeln, dass keine Sprungmarken mehr drinne sind!
Ich weiß nich, wie des ohne gehen soll!


----------



## Xeragon (23. Dezember 2001)

Hmm, zum umschreiben hab ich im Moment leider keine Zeit, aber du musst im Prinzip die Labels nur durch Funktionen ersetzen, die dann aufgerufen werden.

@.:jOki:.: Was stört dich an den C++-Streams? IMO sollten printf()/scanf() in C++-Programmen nicht mehr vorkommen, da sie zur CRT gehören.


----------



## Kimble (23. Dezember 2001)

*danke!*

danke,
hab's jetzt ganz ohne goto-Befehle.
Mach's den Code aber nich hier rein!


----------

