beklomme es einfach nicht in den kopf.. ohne globalen variablen
-
Hallo ich bin grad dabei C++ zu lernen..
folgendes Problem bekomme ich nicht in meinen Kopf..#include <iostream.h> #include <conio.h> #include <string> int Eingabe(int); void main() { int s1; Eingabe(s1); cout<<"ich bin dein wort: " << s1; getchar(); } int Eingabe (int a) { cout << "\Bitte geben Sie ein Wort ein "; cin >> a; cout<<"in der Funktion: "<< a <<"\n\n"; return a; }wenn ich die Zahl int s1; globla deklarire habe ich keine Probleme...
wie bekomme ich wenn ich nun 20 eingebe.. auch bei cout<<"ich bin dein wort: " << s1; 20 raus.. da kommt nur ne zufällige zahl aus dem Speicher..cout<<"in der Funktion: "<< a <<"\n\n"; da kommt natürlich 20
wie bekomme ich es hin ohne globale varieablen das ich
auch bei cout<<"ich bin dein wort: " << s1; eingegebenen wert z.b. 20 rausbekomme? geht das überhaupt? Wenns geht bitte mit Erklärung damit ich mir ads merken kannvielen dan jetzt schon mal
gruß AL
-
#include <iostream.h> #include <conio.h> #include <string> int Eingabe(void); void main() { cout<<"ich bin dein wort: " << Eingabe(s1); getchar(); } int Eingabe (void) { cout << "\Bitte geben Sie ein Wort ein "; cin >> a; cout<<"in der Funktion: "<< a <<"\n\n"; return a; }oder:
#include <iostream.h> #include <conio.h> #include <string> void Eingabe(int *a); void main() { int s1; Eingabe(&s1); cout<<"ich bin dein wort: " << s1; getchar(); } void Eingabe (int *a) { cout << "\Bitte geben Sie ein Wort ein "; cin >> *a; cout<<"in der Funktion: "<< *a <<"\n\n"; }
-
danke für die schnelle antwort ;o)
die variante#include <iostream.h> #include <conio.h> #include <string> void Eingabe(int *a); void main() { int s1; Eingabe(&s1); cout<<"ich bin dein wort: " << s1; getchar(); } void Eingabe (int *a) { cout << "\Bitte geben Sie ein Wort ein "; cin >> *a; cout<<"in der Funktion: "<< *a <<"\n\n"; }gefällt mir gut ;o)
aber kann mir einer erkläre wieso man nun * vor der variablen schreibt und
ein & bei Eingabe(&s1); danke
-
oder besser
#include <iostream> //ohne .h #include <conio.h> void Eingabe (int &a) // Referenz statt Pointer { std::cout << "\Bitte geben Sie ein Wort ein "; std::cin >> a; std::cout<<"in der Funktion: "<< a <<"\n\n"; } int main() // int main statt void { int s1; Eingabe(s1); std::cout<<"ich bin dein wort: " << s1; getchar(); }Die Rückgabe ist aber die beste Variante.
-
bezüglich * &
http://tutorial.schornboeck.net/referenzen.htm
http://tutorial.schornboeck.net/zeiger.htm
-
Ich hab das Programm auch mal fertiggeschrieben, wie stehts denn mit dieser Lösung?
#include <iostream.h> //wird von cout benötigt string Eingabe(); int Berechnung(string, int); void Ausgabe(string, int); void main() { int AnzahlE; string s; s = Eingabe(); AnzahlE = Berechnung(s, AnzahlE); Ausgabe(s, AnzahlE); getchar(); } string Eingabe() { string Wort; cout<<"\nBitte geben sie ein Wort ein: "; cin>> Wort; return(Wort); } int Berechnung(string Wort, int Zahl) { unsigned int i; cout<<Wort; Zahl = 0; for (i = 0; i <= (Wort.length() - 1); i++) { if ((Wort[i] == 'e') || (Wort[i] == 'E')) Zahl++; } return(Zahl); } void Ausgabe(string Wort, int Zahl) { cout<<"\nDas Wort "<< Wort <<" hat "<<Zahl<<" E-Buchstaben."; }greetz da_machine

-
ok danke für die infos
#include <iostream.h> #include <conio.h> #include <string> string Eingabe(); void main() { string s1; s1=Eingabe(); cout<<"ich bin dein wort: " << s1; getchar(); } string Eingabe () { string a; cout << "\Bitte geben Sie ein Wort ein "; cin>>a; return a; }funtzt nun ;o)
-
@da_machine
Dein Code, insbesondere der von Berechnung ist etwas bearbeitungsbedürftig.
1. statt iostream.h nimmt man iostream
2. statt void main() nimmt man int main()
deine Variante ist nicht standardkonform.deine Variante von Berechnung + Kommentare
int Berechnung(string Wort, int Zahl) // warum übergibst du hier Zahl? { unsigned int i; //warum deklarierst du hier i? cout<<Wort; Zahl = 0; // hier wird Zahl ja sowieso neu belegt for (i = 0; i <= (Wort.length() - 1); i++) // Warum diese merkwürdige Abbruchbedingung? { if ((Wort[i] == 'e') || (Wort[i] == 'E')) Zahl++; } return(Zahl); }besser so
int Berechnung(const string& Wort) // Übergabe als konstante Referenz statt Kopie { cout << Wort; int Zahl = 0; size_t length = Wort.length(); for (size_t i = 0; i <length; i++) // Abbruchbedingung geändert { if ((Wort[i] == 'e') || (Wort[i] == 'E')) Zahl++; } return(Zahl); }
-
Braunstein schrieb:
oder besser
#include <iostream> //ohne .h #include <conio.h> void Eingabe (int &a) // Referenz statt Pointer { std::cout << "\Bitte geben Sie ein Wort ein "; std::cin >> a; std::cout<<"in der Funktion: "<< a <<"\n\n"; } int main() // int main statt void { int s1; Eingabe(s1); std::cout<<"ich bin dein wort: " << s1; getchar(); }Die Rückgabe ist aber die beste Variante.
Ok, ich hatte keine Zeit drum die paar Fehler, tut mir leid.

Aber eine Frage hab ich noch dazu: Ist es wirklich besser eine Referenz zu benützen? Ich denke, das ist egal bis auf den kleinen Umstand, dass die Referenz besser aussieht? Mir sind die Teile suspekt. Sie sind da aber man sieht sie nicht...
-
so schrieb:
Aber eine Frage hab ich noch dazu: Ist es wirklich besser eine Referenz zu benützen?
Ja, wirklich. Nutze Referenzen anstatt Pointer, wann immer du kannst. Nutze Referenzen auch, wenn du das Kopieren eines Objekts verhindern möchtest.
Ich denke, das ist egal bis auf den kleinen Umstand, dass die Referenz besser aussieht?
Man muss auch nicht auf 0 prüfen und kann keine Pointerarithmetik drauf anwenden, außerdem hat's der Methodenaufrufer leichter.
Mir sind die Teile suspekt. Sie sind da aber man sieht sie nicht...
Stimmt, sie sind da, aber im Speicher sind sie nicht da, sie sind nur ein anderer Name für ein Objekt.
MfG
GPC