Problem mit zeigern!



  • lol



  • Okay versuch nummer 103 🙂 :

    #include<iostream>
    using namespace std;
    /*Zeiger test*/
    void func1(int, int);
    void func2(int*, int*);
    void func3(int&, int&);
    int* func4();
    
    int main()
    {
    	int zahl;
    	int zahl2;
    	int* pzahl;
    	int* pzahl2;
    	pzahl=&zahl;
    	pzahl2=&zahl2;
    
    	cout<<"Geben sie 2 zahlen ein"<<endl;
    	cin>>zahl;
    	cin>>zahl2;
    
    	cout<<"Geben sie nun die zeiger art ein die sie haben wohlen"<<endl
    		<<"Hier die Uebersicht(1=Werteuebergabe, 2=Zeigerwerteuebergabe, "<<endl
    		<<"3=Uebergabe per Reference, 4=heapspeicher nutzung"<<endl;
    
    	int choice;
    	cin>>choice;
    
    	switch(choice)
    	{
    	case 1:
    		func1(zahl, zahl2);
    			cout<<zahl<<endl
    				<<zahl2<<endl;
    		break;
    	case 2:
    		func2(pzahl, pzahl2);
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    			break;
    	case 3:
    		func3(zahl, zahl2);
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    			break;
    	case 4:
    		int* pzahl2;//deklaration des zeigers auf int zahl2
    		pzahl2=func4();//zeiger an func 4 übergeben
    		delete pzahl2;//speicher löschen
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    		break;
    	default:
    		cout<<"Eingabe Ungueltig"<<endl;
    			break;
    	}
    	system("PAUSE");
    }
    
    void func1(int number, int number2)
    {
    	number=100;
    	number2=200;
    	cout<<number<<endl
    		<<number2<<endl;
    }
    
    void func2(int* pnumber, int* pnumber2)
    {
    	*pnumber=110;
    	*pnumber2=220;
    }
    
    void func3(int& number, int& number2)
    {
    	number=130;
    	number2=240;
    	cout<<number<<endl
    		<<number2<<endl;
    }
    
    int* func4()
    {
    	int* pnumber=new int;//speicherplatz holen
    	*pnumber=10;//speicher wert zuweisen
    	cout<<*pnumber<<endl;//wert ausgeben
    	return pnumber;//zeiger zurückgeben 
    }
    


  • Er hats endlich kapiert 😃
    Nix für ungut, aber zusehen, dass endlich kein return nummer1, mummer2 in deinem Code steht ist echt schön.



  • Jo trotz meines Realschulabschlusses(@WIP) stand ich ne weile auf der leitung 🙂
    Ferien halt 😛



  • MartinMilbret schrieb:

    trotz meines Realschulabschlusses(@WIP) stand ich ne weile auf der leitung 🙂

    lol?



  • hätte ich anders schreiben sollen. Korektur:
    Trotz meines vorhabens einen erweiterten Realschulabschluss zu erreichen stand ich dur die ferien extrem auf der leitung 😛

    EDIT: Hier mal das programm mit header datei(mit header daten bin ich noch am anfang :P):
    header:

    int zahl;
    int zahl2;
    int* pzahl;
    int* pzahl2;
    int choice;
    
    void func1(int, int);
    void func2(int*, int*);
    void func3(int&, int&);
    int* func4();
    

    cpp datei:

    #include<iostream>
    #include"Crap.h"
    using namespace std;
    /*Zeiger test*/
    
    int main()
    {
    	pzahl=&zahl;
    	pzahl2=&zahl2;
    	cout<<"Geben sie 2 zahlen ein"<<endl;
    	cin>>zahl;
    	cin>>zahl2;
    
    	cout<<"Geben sie nun die zeiger art ein die sie haben wohlen"<<endl
    		<<"Hier die Uebersicht(1=Werteuebergabe, 2=Zeigerwerteuebergabe, "<<endl
    		<<"3=Uebergabe per Reference, 4=heapspeicher nutzung"<<endl;
    	cin>>choice;
    
    	switch(choice)
    	{
    	case 1:
    		func1(zahl, zahl2);
    			cout<<zahl<<endl
    				<<zahl2<<endl;
    		break;
    	case 2:
    		func2(pzahl, pzahl2);
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    			break;
    	case 3:
    		func3(zahl, zahl2);
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    			break;
    	case 4:
    		int* pzahl2;//deklaration des zeigers auf int zahl2
    		pzahl2=func4();//zeiger an func 4 übergeben
    		delete pzahl2;//speicher löschen
    		cout<<zahl<<endl
    			<<zahl2<<endl;
    		break;
    	default:
    		cout<<"Eingabe Ungueltig"<<endl;
    			break;
    	}
    	system("PAUSE");
    }
    
    void func1(int number, int number2)
    {
    	number=100;
    	number2=200;
    	cout<<number<<endl
    		<<number2<<endl;
    }
    
    void func2(int* pnumber, int* pnumber2)
    {
    	*pnumber=110;
    	*pnumber2=220;
    }
    
    void func3(int& number, int& number2)
    {
    	number=130;
    	number2=240;
    	cout<<number<<endl
    		<<number2<<endl;
    }
    
    int* func4()
    {
    	int* pnumber=new int;//speicherplatz holen
    	*pnumber=10;//speicher wert zuweisen
    	cout<<*pnumber<<endl;//wert ausgeben
    	return pnumber;//zeiger zurückgeben 
    }
    

    Falls noch mehr in die header kann bitte antworten 🙂



  • Okay nochmal ein anderes zeiger problem:

    #include<iostream>
    using namespace std;
    char* wahl(int);
    
    int main()
    {
    	int months;
    	cout<<"Welchen monat wollen sie haben(1-12)\n";
    	cin>>months;
    	wahl(months);
            cout<<months<<"\n";
    	system("PAUSE");
    }
    
    char* wahl(int monat)
    {
    	if(monat<1||monat>12)
    	{
    		return "ungültig";
    	}
    	char* pszmonate[]={"ungültig", "Januar", "Februar", "Maerz", 
    						"April", "Mai", "Juni", "Juli",
    						"August", "September", "Oktober", 
    						"November", "Dezember"}; 
    	cout<<monat<<"\n";
    	return pszmonate[monat];
    }
    

    Das Programm ansich läuft aber er soll ja die namen der monate zurückgeben und dann ausgeben aber er gibt nur die zahl die eingegeben wurde aus 😢



  • Dann mußt du auch den Rückgabewert von wahl() weiterverarbeiten (in der Funktion gibst du wirklich nur die Zahl aus und schickst den Monatsnamen per return an's Hauptprogramm - nur das vergisst diesen Wert sofort wieder).

    btw, ich weiß nicht, ob der Wert noch gültig ist, wenn du aus der Funktion rauskommst - kann genausogut sein, daß sich inzwischen der Stack aufgräumt hat und der zurückgegebene Pointer auf einen Haufen Datenmüll zeigt.



  • also sollte ich die ausgabe wohl mal auf die funktion eingrenzen oder?
    aber wenn ich das mache gibt er auch nur die zahl aus 😞



  • cout<<pszmonate[monat];
    

    ?



  • @shapless
    THX Hat funktioniert 😉

    hier der code:

    #include <iostream>
    using namespace std;
    void wahl(int);
    
    int main()
    {
    	int months;
    	cout<<"Welchen monat wollen sie haben(1-12)\n";
    	cin>>months;
    	wahl(months);
    	system("PAUSE");
    }
    
    void wahl(int monat)
    {
    	if(monat<1||monat>12)
    	{
    		cout<<"ungueltig\n";
    	}
    	else
    	{
    	char* pszString[]={"ungueltig", "Januar", "Februar", "Maerz", 
    						"April", "Mai", "Juni", "Juli",
    						"August", "September", "Oktober", 
    						"November", "Dezember"}; 
    	cout<<pszString[monat]<<"\n";
    	}
    }
    

Anmelden zum Antworten