Großes Problem mit einfacher Funktion

Pitchblack

Mitglied
Hi,
wie ihr seht habe ich irgendwo einen wirklich blöden Fehler eingebaut, den ich einfach nicht finde.
Ich will praktisch eine Ein- und Ausgabe über zwei, dafür vorgesehene Funktionen realisieren. Das Problem ist jetzt, dass ich realtiv neu in dem Thema bin und mir hier nicht selbst helfen kann. Es wäre also nett wenn mir jemand meinen Fehler vorführen könnte.

Danke schon mal.


Code:
#include <iostream.h>

#define N '\n'

float Eingabe (void);
void Ausgabe (float Eingabe);

void main (void)
{
	float Eingabe (void);
	void Ausgabe (float Eingabe);
}

float Eingabe (void)
{
	
	cout <<"Geben Sie eine Zahl ein"<<N;
	cin>>Eingabe;
		return Eingabe;

}

void Ausgabe (float Eingabe)
{
	cout<<"Sie haben "<<Eingabe<<" eingegeben"<<N;
}
 
Öhm ja, nun ich hab mal was umgefummelt.
Also wenn du schon die Variablen GLOBAL zur Verfügung stellst brauchst du die in den Funktionsparametern nicht mehr übergeben.
Aber ich glaube der Code sollte dir etwas helfen.

Ich werde den aber noch mal überarbeiten.

Code:
#include <iostream.h>

#define N '\n'

float f_eingabe = 0.;	// PFUI Globale Initialisierung!		

void Eingabe (void)
{
	
	cout <<"Geben Sie eine Zahl ein"<<N;
	cin >> f_eingabe;
	
	// return f_eingabe;       // die Variable ist global (return nicht nötig :-)

}

void Ausgabe ( )
{
	cout<<"Sie haben "<< f_eingabe<<" eingegeben"<< N;
}

int main (void)
{
	int taste;

	Eingabe( );

	Ausgabe ( );
	
	cin >> taste;		// nur damit man sieht was passiert!

	return 0;
}

Ich weiss jetzt schimpfen gleich ganz viele :-)
 
Zuletzt bearbeitet:
Würdest du mal das ganze Compilieren, dann würdes du sofort feststellen, was da nicht so ganz passt.
Andere Möglichkeit wäre, daß du dir mal ein Grundlagenbuch zu C++ zur Hand nimmst, damit du auch verstehtst warum das falsch ist.
Würde man deinen Code übersetzten, dann kommen bei VC++ unter Windows folgende Fehler:

...(17) : error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'float (__cdecl *)(void)' akzeptiert (oder keine geeignete Konvertierung moeglich)
...(18) : error C2440: 'return' : 'float (__cdecl *)(void)' kann nicht in 'float' konvertiert werden Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist

Ok ich muss sagen, diese Fehler sind nicht immer leicht zu verstehen und sind dabei nicht einmal 100% syntaktische Fehler, aber was du im Klartext hier versuchst, ist mit dem ">>" Operator einen Stream in einen Zeiger auf eine Funktion zu bringen.
(wäre mal interessant ob sowas überhaupt möglich ist, mit entsp. typecast :-)
Außerdem sind die Aufrufe in deiner main() falsch.
Zudem gewöhn dir bei main() einen konformen Stil an. Denn void main(void) ist nicht C/C++ Standard.
Stelle deinen Code mal so um, dann wird das auch gehen:
Code:
float Eingabe (void);  
void Ausgabe (float Eingabe);    

int main (int argc, char** argv) 
{  	
   float input = Eingabe();
   Ausgabe (input);  
   return 0;
}    

float Eingabe (void) 
{  	
   float input=0.0;
   cout <<"Geben Sie eine Zahl ein"<<endl;  
   cin>>input;
   return input;  
}   
void Ausgabe (float Eingabe) 
{  	
   cout<<"Sie haben "<<Eingabe<<" eingegeben"<<endl;  
}

Gruß Homer
 
Cool danke für die 2 Lösungen. Die zwei sehen logischer aus als mein Ergus.

@bsdxroot
Was ich aber nicht kapiere ist, dass du in der Main nochmal eine Eingabe abverlangst. Was hat das für einen Sinn?

@ Daniel Toplak

Ich hab hier ein Buch, dass sich mit c++ beschäftigt. Ich halte mich also vorerst an die Buchkonformalität

Ich werd mal weiter ins Thema eindringen.

Ciao
 
Original geschrieben von Pitchblack
Cool danke für die 2 Lösungen. Die zwei sehen logischer aus als mein Ergus.

@bsdxroot
Was ich aber nicht kapiere ist, dass du in der Main nochmal eine Eingabe abverlangst. Was hat das für einen Sinn?

Ganz simpel:

Wenn du das Programm ausführst und deine Zahl eingegeben hast zeigt er dir an:
"Sie haben bla bla eingegeben" und macht die Console zu. Und das auch noch brachial schnell :-) !
Kannst das "INT TASTE" und das "CIN >> TASTE;" einfach rausnehmen. Kuck dann mal was da passiert :-)

Greets
Frank

PS: schau mal auf http://www.pronix.de nach zum C/C++ lernen ist das genial :-)
 
Öhm, jo! :-D

Jetzt seh ich gerade mal das ich total dran vorbeigeschossen habe.
Sorry, sogesehen ist die Variante vom Daniel tatsächlich sauberer gelöst.
Ich hab dann in der Eile wohl das Problem mit den ganzen "Eingabe" n gehabt.
Das beweist aber auch wieder das es zu einem Problem NICHT immer NUR EINE Lösung gibt :-D
 
Zurück