Problem mit Referenzparameter
-
Hallo,
Leider klappt mein Programm nicht so wie es sollte

es soll einfach eine char an mein Unterprogramm übergeben mit einen Referenzparameter....
leider gibt er mit eine Fehlermeldung beizuwandeln=strlwr(zuwandeln);aus.
Fehlermeldung: invalid conversion from 'char' to 'char*'kann mir da jemand helfen?
vielen Dank im vorraus
//Bibilotheken #include <cstdlib> #include <iostream> using namespace std; //Funktion umwandeln void umwandeln(char &zuwandeln){ zuwandeln=strlwr(zuwandeln); } // Hauptprogramm int main() { char wort[100]; cout<<"Bitte geben Sie ein Wort ein: "; cin>>wort[100]; umwandeln(wort); cout<<"\nUmgeandelt: "<<wort<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }
-
Um das Problem zu lösen und weitere Probleme vorzubeugen, solltest du vielleicht auf
std::stringumsteigen
-
Firefighter schrieb:
Um das Problem zu lösen und weitere Probleme vorzubeugen, solltest du vielleicht auf
std::stringumsteigen
Würde ich auch meinen. Oder mindestens etwas aus der C++-Standardbibliothek verwenden.
Im Übrigen kann man sich die Dokumentation zu einer Funktion anschauen, bevor man diese benutzt...
-
Also entweder bin ich blind oder es steht in der Referenz nicht mit dabei,oder warum finde ich die Funktion strlwr in cstdlib nicht?
http://www.cplusplus.com/reference/clibrary/cstdlib/
-
Firefighter schrieb:
Also entweder bin ich blind oder es steht in der Referenz nicht mit dabei,oder warum finde ich die Funktion strlwr in cstdlib nicht?
Weil sie nicht zur C++-Standardbibliothek gehört.

-
Jaja das is mir schon klar, daher hatte ich ja in den C-Headern nachgesehen.Aber wo soll er sie dann sonst her haben?Ich glaube ich bin zu müde und steh grad aufem Schlauch
Du wirst auch nur Abends aktiv, wa Nexus? Is mir gestern und heute aufgefallen 
-
mein lehrer möchte aber gerne, dass ich char benutze... oder geht es mit char nicht?
-
Firefighter schrieb:
Jaja das is mir schon klar, daher hatte ich ja in den C-Headern nachgesehen.
Du weisst aber, dass die C-Standardbibliothek ein Teil der C++-Standardbibliothek ist?

Du wirst auch nur Abends aktiv, wa Nexus? Is mir gestern und heute aufgefallen

Ja, ich habe oft nur am Abend Zeit...
sporti_87 schrieb:
mein lehrer möchte aber gerne, dass ich char benutze... oder geht es mit char nicht?
Doch, aber sag uns doch, was du genau machen willst.
-
Nexus schrieb:
Firefighter schrieb:
Jaja das is mir schon klar, daher hatte ich ja in den C-Headern nachgesehen.
Du weisst aber, dass die C-Standardbibliothek ein Teil der C++-Standardbibliothek ist?

Ich sag doch der Tag war heute ne Nummer zu hart für mich, logisch,habs einfach mal verdrängt

-
Na er soll das übergebende Wort im Unterprogramm so um wandeln, dass alle Buchstaben klein geschrieben werden.
Und er soll das Wort als Referenzparameter übergeben.
-
sporti_87 schrieb:
Na er soll das übergebende Wort im Unterprogramm so um wandeln, dass alle Buchstaben klein geschrieben werden.
Und er soll das Wort als Referenzparameter übergeben.Wieso weißt du den rückgabewert der variablen den zu??
Durch die Weitergabe der Adresse wird keine kopie gefertigt, sondern die variable zuwandeln direkt verändert.
Außerdem musst du den übergebenen Parameter von strlwr etwas abändern.Auch solltest du cout/cin wegmachen und durch c-funktionen ersetzen...
Hoffe das hilft dir
-
Das sollte so eigentlich mit dieser Funktion gehen. Hier wäre eine Möglichkeit. Wenn du Teile davon nicht verstehst, frag ruhig.
#include <locale> void kleinschreiben(char* str) { for (char* c = str; *c != '\0'; ++c) *c = std::tolower(*c, std::locale()); }Oder etwas kompakter:
void kleinschreiben2(char* str) { for (; *str; ++str) *str = std::tolower(*str, std::locale()); }Referenzparameter sind übrigens Unsinn, wenn du mit C-Strings arbeiten willst. Da sind Zeiger wie oben die bessere Wahl.
nocheinmitglied schrieb:
Auch solltest du cout/cin wegmachen und durch c-funktionen ersetzen...
Hoffe das hilft dir
Hör auf, im C++ Forum Unfug zu verbreiten. Das hat weder mit seinem Problem zu tun noch hilft es ihm.
-
Nexus schrieb:
nocheinmitglied schrieb:
Auch solltest du cout/cin wegmachen und durch c-funktionen ersetzen...
Hoffe das hilft dir
Hör auf, im C++ Forum Unfug zu verbreiten. Das hat weder mit seinem Problem zu tun noch hilft es ihm.
Er nutzt einen C Datentyp, eine C Funktion.... ich denke, dann sollte er auch zu C O/I-Funktionen zugreifen, sonst könnte er Probleme kriegen:
Wenn ich cin nutze, und dies in ein char array speichere, kommt bei mir nur nonsense raus (" <ÿ" ", nutze MinGW). Dies wäre ein Problem^^sporti_87 schrieb:
Und er soll das Wort als Referenzparameter übergeben.
Nexus schrieb:
Referenzparameter sind übrigens Unsinn, wenn du mit C-Strings arbeiten willst. Da sind Zeiger wie oben die bessere Wahl.

würde bei der Funktion bleiben, die Zuweisung löschen und "zuwandeln" als referenz übergeben (strlwr(&zuwandeln)), sowie cin abändern. (cout kann bleiben)
-
nocheinmitglied schrieb:
Er nutzt einen C Datentyp, eine C Funktion.... ich denke, dann sollte er auch zu C O/I-Funktionen zugreifen
Er postet im C++-Forum, also kann angenommen werden, dass er eine C++-Lösung will. Und da finde ich es angebracht, entsprechende Mittel aufzuzeigen. Übrigens ist seine Funktion wie bereits gesagt nicht aus C. Und
char*ist genauso ein Datentyp von C++.nocheinmitglied schrieb:
sonst könnte er Probleme kriegen:
Wenn ich cin nutze, und dies in ein char array speichere, kommt bei mir nur nonsense raus (" <ÿ" ", nutze MinGW). Dies wäre ein Problem^^Ich hab das Gefühl, du kennst dich zu wenig aus. Man kann mit
std::cinauch in Arrays einlesen (vorausgesetzt, man hat genügend Speicher bereitgestellt). Nur weil du nicht weisst, wie, musst du nichtstd::cinschlecht darstellen.nocheinmitglied schrieb:

Nur weil sporti_87 es mit Referenzen machen soll, muss das noch lange nicht heissen, dass diese Vorgehensweise gut ist.
nocheinmitglied schrieb:
würde bei der Funktion bleiben, die Zuweisung löschen und "zuwandeln" als referenz übergeben (strlwr(&zuwandeln))
Du kennst dich definitiv zu wenig aus! In deinem Ausdruck kommt zum Beispiel nirgends eine Referenz vor.
-
Dann eben mit cin/cout....
//Bibilotheken #include <cstdlib> #include <iostream> using namespace std; //Funktion umwandeln void umwandeln(char &zuwandeln){ strlwr(&zuwandeln); } // Hauptprogramm int main() { char wort[100]; cout<<"Bitte geben Sie ein Wort ein: "; cin>>wort; umwandeln(wort[0]); cout<<"\nUmgewandelt: "<<wort<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }Nexus schrieb:
Du kennst dich definitiv zu wenig aus! In deinem Ausdruck kommt nirgends eine Referenz vor.
Dann kläre mich doch bitte auf und sag mir was strlwr(&zuwandeln) ist.
Achja und was mein fehler bei cin war, war das wort[100], das zu wort gekürzt werden muss...
Nexus schrieb:
Nur weil sporti_87 es mit Referenzen machen soll, muss das noch lange nicht heissen, dass diese Vorgehensweise gut ist.
Dies habe ich auch nicht gesagt, sondern wollte dich nur darauf aufmerksam machen, falls du es vllt. überlesen haben solltest
(kam mir irgendwie so vor, aber ich habe ja sowie keine Ahnung
)
-
nocheinmitglied schrieb:
Dann kläre mich doch bitte auf und sag mir was strlwr(&zuwandeln) ist.
Eine Funktion, die aufgerufen wird und als Argument die Adresse einer
char-Variablen nimmt. Das & ist hierbei der Adressoperator.Aber was willst du mit deinem Code bezwecken? Wieso initialisierst du eine Variable, die du gleich überschreibst? Warum benutzt du neben der Nicht-Standard-Funktion
strlwr()auch noch betriebssystemabhängige Dinge wiesystem()? Das ist mehr verwirrend als etwas anderes.Und überhaupt, wieso glaubst du mir nicht, dass es keinen Sinn macht, eine Referenz auf das erste Element eines Arrays zu übergeben, wenn du am ganzen Array interessiert bist?
Edit:
nocheinmitglied schrieb:
Dies habe ich auch nicht gesagt, sondern wollte dich nur darauf aufmerksam machen, falls du es vllt. überlesen haben solltest

Danke, aber ich habe sporti_87 gerade aus diesem Grund darauf hingewiesen.

-
Nexus schrieb:
Dann kläre mich doch bitte auf und sag mir was strlwr(&zuwandeln) ist.
Eine Funktion, die aufgerufen wird und als Argument die Adresse einer char-Variablen nimmt. Das & ist hierbei der Adressoperator.
Danke, hab immer Referenz dazu gesagt, wenn es als Parameter deklariert wurde/übergeben wurde
sporti_87 schrieb:
Hallo,
Leider klappt mein Programm nicht so wie es sollte

es soll einfach eine char an mein Unterprogramm übergeben mit einen Referenzparameter....
leider gibt er mit eine Fehlermeldung beizuwandeln=strlwr(zuwandeln);aus.
Fehlermeldung: invalid conversion from 'char' to 'char*'kann mir da jemand helfen?
vielen Dank im v******
//Bibilotheken #include <cstdlib> #include <iostream> using namespace std; //Funktion umwandeln void umwandeln(char &zuwandeln){ zuwandeln=strlwr(zuwandeln); } // Hauptprogramm int main() { char wort[100]; cout<<"Bitte geben Sie ein Wort ein: "; cin>>wort[100]; umwandeln(wort); cout<<"\nUmgeandelt: "<<wort<<"\n"; system("PAUSE"); return EXIT_SUCCESS; }Nexus schrieb:
Aber was willst du mit deinem Code bezwecken? Wieso initialisierst du eine Variable, die du gleich überschreibst? Warum benutzt du neben der Nicht-Standard-Funktion strlwr() auch noch betriebssystemabhängige Dinge wie system()? Das ist mehr verwirrend als etwas anderes.
Und überhaupt, wieso glaubst du mir nicht, dass es keinen Sinn macht, eine Referenz auf das erste Element eines Arrays zu übergeben, wenn du am ganzen Array interessiert bist?
Weil der Code nicht so sehr vom Originalen abweicht.
Warum gewisse Eintscheidungen getroffen wurden, das Frage bitte sporti_87
-
nocheinmitglied schrieb:
Ok Danke, hab immer Referenz dazu gesagt, wenn es als Parameter deklariert wurde/übergeben wurde
Besonders "deklariert/übergeben" lässt mich darauf schliessen, dass du etwas verwechselst. Also: Parameter werden deklariert (seitens der Funktion). Argumente werden übergeben (vom Aufrufer).
Das Folgende kennzeichnet eine Funktion, die eine Referenz auf ein
intals Parameter hat.void Function(int& Ref);Das hingegen ist ein Aufruf, bei dem die Adresse der Variablen
Varübergeben wird. Dazu muss die Funktion einen Zeiger als Parameter haben.OtherFunction(&Var)nocheinmitglied schrieb:
Weil der Code nicht so sehr vom Originalen abweicht.
Warum gewisse Eintscheidungen getroffen wurden, das Frage bitte sporti_87Gut, das hat was. Naja, ich lege beim Antworten zum Teil mehr Wert auf elegante, intuitive Lösungen als auf möglichst wenig Veränderung am Original. Schliesslich soll sporti_87 was lernen und nicht seine Unschönheiten kompilierbar machen.

-
Nexus schrieb:
nocheinmitglied schrieb:
Ok Danke, hab immer Referenz dazu gesagt, wenn es als Parameter deklariert wurde/übergeben wurde
Besonders "deklariert/übergeben" lässt mich darauf schliessen, dass du etwas verwechselst. Also: Parameter werden deklariert (seitens der Funktion). Argumente werden übergeben (vom Aufrufer).
Das Folgende kennzeichnet eine Funktion, die eine Referenz auf ein
intals Parameter hat.void Function(int& Ref);Das hingegen ist ein Aufruf, bei dem die Adresse der Variablen
Varübergeben wird. Dazu muss die Funktion einen Zeiger als Parameter haben.OtherFunction(&Var)nocheinmitglied schrieb:
Weil der Code nicht so sehr vom Originalen abweicht.
Warum gewisse Eintscheidungen getroffen wurden, das Frage bitte sporti_87Gut, das hat was. Naja, ich lege beim Antworten zum Teil mehr Wert auf elegante, intuitive Lösungen als auf möglichst wenig Veränderung am Original. Schliesslich soll sporti_87 was lernen und nicht seine Unschönheiten kompilierbar machen.

"deklariert/übergeben"... doofe angewohnheit von mir. damit meinte ich eigentlich ein "und". Also ich habe immer gedacht es heißt referenz beim deklarieren und beim übergeben, aber danke für deine Hilfsbereitschaft
Ich hab es auch gemerkt, dass wir zwei irgendwie etwas anderes wollten
