#1 12. Oktober 2008 C++ ToUpper wie kann ich eine eingabe die ich von hand erledigt hab in großbuchstaben umwandeln. Hier mein code: Code: #include <iostream> #include <string> #include <cstdlib> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include<conio.h> using namespace std; int Spiel_Beginnen() { char Eingabe; string Eingabe1; cin >> Eingabe; Eingabe = toupper(); cout << Eingabe << endl; cin.get(); return 0; } ich möchte, dass wenn ich z.b. HaLLo eingebe, dass dann bei der ausgabe HALLO steht. hoffe ihr versteht mein prob und könnt mir mit einem kurzen beispiel helfen. + Multi-Zitat Zitieren
#3 12. Oktober 2008 AW: C++ ToUpper das klappt irgendwie nicht. wenn ich jetzt meine Eingabe in großbuchstaben ausgeben lassen möchte müsste das doch so gehn: Code: char Eingabe; char WURF; char LIST; cout << "Wollen Sie anfangen? Zum Wuerfeln bitte 'Wurf' eingeben!" << "\n\n"; cin >> Eingabe; [COLOR="DarkRed"]int toupper(Eingabe);[/COLOR] cout << Eingabe << "\n"; if (Eingabe == 'LIST') { int Liste(); return Liste(); }else if (Eingabe == 'WURF') { int Wuerfeln(); return Wuerfeln(); } system("PAUSE"); return EXIT_SUCCESS; } + Multi-Zitat Zitieren
#4 12. Oktober 2008 AW: C++ ToUpper nein d.h. dass du nur ein einzelnes zeichen übergeben kannst. Einen character eben. Die Funktion liefert dir einen Integer Wert zurück den du in einen Character converten kannst. D.h. du musst das ganze mit einer Schleife lösen. Hier ein link: toupper - C++ Reference Gruß meckes + Multi-Zitat Zitieren
#5 13. Oktober 2008 AW: C++ ToUpper Siehe Vorposter und die Referenz, welche ich dir gecshickt habe. Du musst sie auch lesen . + Multi-Zitat Zitieren
#6 30. Oktober 2008 AW: C++ ToUpper So, dass mit dem toUpper hab ich ja nun verstanden. thx nochmal an die Helfer . Jetzt hab ich aber ein neues Prob. ich will nun eine Eingabe tätigen, diese dann in einer variable speichern und auf dem speicher ort mit einem Zeiger zeigen und dessen inhalt ausgeben lassen. dieser inhalt wird dann an die methode toupper übergeben und soll dann halt groß ausgegeben werden. Mein prob ist nun, dass der compiler mir so komige zeichen zurück gibt ( keine hexadezimalen ) Quellcode: Code: //Spielbeginn #include <iostream> #include <string> #include <cstdlib> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <conio.h> #include <cctype> #include <time.h> void Liste( int,int,int,int,int,int ); void auslesen( int ); void strtoupper(char* str); using namespace std; int main() { char Eingabe; string WURF; string LIST; cout << "\nSpielstart" << "\n\n"; cout << "Bevor Sie nun entgueltig mit dem Spiel beginnen koennen, muss ich noch zwei Sachen erklaeren;" << "\n\n"; cout << "Sie koennen sich mitten im Spiel Ihre Ergebnisliste ansehen. Geben Sie dazu einfach 'List' ein!" << "\n\n"; cout << "Wollen Sie anfangen? Zum Wuerfeln bitte 'Wurf' eingeben!" << "\n\n"; cin >> Eingabe; char e = Eingabe; char* Zeiger = & e; cout << "Wert des Zeigers: " << Zeiger << endl; strtoupper(Zeiger); cout << Eingabe << "\n"; if (Eingabe == 'LIST') { Liste(false, false, false, false, false, false); }else if (Eingabe == 'WURF') { int Wuerfeln(); return Wuerfeln(); } system("PAUSE"); return EXIT_SUCCESS; } void strtoupper(char* str) { int i=0; char c; while (str[i]) { c=str[i]; putchar (toupper(c)); i++; } } Ausgabe: {bild-down: http://imageshack.us/a/img222/5831/44407482uq4.jpg} {bild-down: http://img222.imageshack.us/images/thpix.gif} hoffe jemand findet den fehler und kann mir helfen. + Multi-Zitat Zitieren
#7 31. Oktober 2008 AW: C++ ToUpper Naja. Ein C-String wird ausgegeben bis 'ne null vorkommt, bei dir kommt aber kein null vor, bzw. irgendwann zufällig im Speicher. Ein Normaler C-String: 'H', 'a', 'l', ..., '\0'. Hier wird solange ausgegeben bis 'ne null gefunden wird, bei dir sieht das aber ganz anders aus: '<Deine Eingabe>', .. irgendwelche Werte die im Speicher stehen. Also entweder gibst du nur ein Zeichen aus weil du kein Array aus Zeichen hast, wo du bestimmen könntest wann die Ausgabe endet, oder du machst dir halt dieses Array . + Multi-Zitat Zitieren
#8 31. Oktober 2008 AW: C++ ToUpper kannst du mir nicht mal nen paar code zeilen schreiben, wie das mitm array aussieht? ich bekomm das irgendwie nicht hin. + Multi-Zitat Zitieren
#9 31. Oktober 2008 AW: C++ ToUpper Array ist da unsinnig. Mach's per putc/printf/std: stream& put ( cout.put ) + Multi-Zitat Zitieren
#10 31. Oktober 2008 AW: C++ ToUpper komm bei dieser stelle einfach nicht weiter, wäre nett wenn du mir mal den code mit putc/printf/std: stream& put ( cout.put ) erstellen und posten könntest. Flu + Multi-Zitat Zitieren
#11 31. Oktober 2008 AW: C++ ToUpper in deiner strtoupper() funktion verwendest du Code: while (str[i]) Die Schleife läuft durch, bis es auf ein 0-Byte stößt (Das markiert bei char-arrays immer das ende des strings) Aufrufen tust du das ganze so: Code: char* Zeiger = & e; cout << "Wert des Zeigers: " << Zeiger << endl; strtoupper(Zeiger); Merkst du was? e ist nur ein einzelnes Zeichen, und der Zeiger zeigt auch nur auf das Zeichen. Und deshalb fehlt das 0-Byte für die Schleife. Die komischen Zeichen kriegst du, weil du einfach irgendnen Speicherbereich (der nach e) ausgibst. + Multi-Zitat Zitieren
#12 31. Oktober 2008 AW: C++ ToUpper So hab iuch das auch schon gemacht, aber diese komigen Zeichen kommen wieder. aber ich weiß nicht wie mans anders macht. + Multi-Zitat Zitieren
#14 8. November 2008 AW: C++ ToUpper Zeig nochmal deinen jetzigen Source-Code. + Multi-Zitat Zitieren
#15 8. November 2008 AW: C++ ToUpper Dies ist mein code: Code: //Spielbeginn #include <iostream> #include <string> #include <cstdlib> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <conio.h> #include <cctype> #include <time.h> void Liste( int,int,int,int,int,int ); void auslesen( int ); void strtoupper(char* str); using namespace std; int Spiel_Beginnen() { char Eingabe; string WURF; string LIST; cout << "\nSpielstart" << "\n\n"; cout << "Bevor Sie nun entgueltig mit dem Spiel beginnen koennen, muss ich noch zwei Sachen erklaeren;" << "\n\n"; cout << "Sie koennen sich mitten im Spiel Ihre Ergebnisliste ansehen. Geben Sie dazu einfach 'List' ein!" << "\n\n"; cout << "Wollen Sie anfangen? Zum Wuerfeln bitte 'Wurf' eingeben!" << "\n\n"; cin >> Eingabe; int i=0; char str[]={Eingabe}; char c; /*while (str[i]) { c=str[i]; putchar (toupper(c)); i++; }*/ cout << "Eingabe: " << c << endl; char e ; char* Zeiger = & e; cout << "Wert des Zeigers: " << e << endl; strtoupper(Zeiger); if (Eingabe == 'LIST') { Liste(false, false, false, false, false, false); }else if (Eingabe == 'WURF') { int Wuerfeln(); return Wuerfeln(); } system("PAUSE"); return EXIT_SUCCESS; } void strtoupper(char* str) { while( *str != 0x00 ) { *str=toupper(*str); ++str; } cout << "Funktion: " << str << endl; } + Multi-Zitat Zitieren
#16 8. November 2008 AW: C++ ToUpper Wir haben dir doch den Fehler schon genannt. Du übergibst an deine strtoupper-Funktion einen einzelnen char. Sprich 1 Zeichen. Und in deiner strtoupper() funktion suchst du nach einem 0-Byte. Aber wie soll dass den gehen, wenn du nur 1 Zeichen hast?! machs doch so; Code: char bla = toupper(Eingabe); und noch paar fehler: Code: if (Eingabe == 'LIST') 1. Zwischen ' ' schreibt man nur immer 1 Zeichen, nicht mehrere (mehrere zwischen " ") 2. Ist Eingabe vom Typ char (d.h. nur ein einzelnes Zeichen) du willst aber mit mehreren vergleichen 3. Vergleicht man C-Strings mit strcmp/strncmp Code: Liste(false, false, false, false, false, false); Deine Liste()-Funktion erwartet ints als Argumente, keine bools. + Multi-Zitat Zitieren
#17 8. November 2008 AW: C++ ToUpper Stimmt alles bis auf das mit der Liste, false hat den Wert 0. + Multi-Zitat Zitieren
#18 13. November 2008 AW: C++ ToUpper Neben den bereits genannten Fehlern ist mir aufgefallen das du nach der Funktion strtoupper den Zeiger wieder auf das erste Element setzen musst Also e zu einem Array machen und vlt erst ma was rein schreiben. Kleines Beispiel: Code: #include <iostream> using namespace std; int main() { char e[6]={"hallo"}; char *Zeiger2= e; char *Zeiger = e; cout << "Text: " << Zeiger << endl; while( *Zeiger != 0x00 ) { *Zeiger=toupper(*Zeiger); ++Zeiger; } Zeiger=Zeiger2; cout << "Text: " << Zeiger << endl; system("pause"); } + Multi-Zitat Zitieren
#19 13. November 2008 AW: C++ ToUpper Wofür den 2. Zeiger? Wenn du das ganze per Funktion ( wie du genannt hast: strtoupper) machst, dann brauchst du auch keinen 2. Zeiger. Du übergibst die Adresse auf die der Zeiger zeigt, nicht die Adresse des Zeigers. + Multi-Zitat Zitieren
#20 14. November 2008 AW: C++ ToUpper er gibt aber in der funktion den zeiger str aus + Multi-Zitat Zitieren
#21 14. November 2008 AW: C++ ToUpper heißt es nicht einfach: Code: Eingabe.toupper(); ? (Methode von char?) + Multi-Zitat Zitieren
#22 15. November 2008 AW: C++ ToUpper Ehm, nein. Er gibt das aus worauf der Zeiger zeigt, und das kann er auch mit der Variable e machen. Zu Thrake7: Nein . + Multi-Zitat Zitieren
#23 15. November 2008 AW: C++ ToUpper remaL du solltest vlt mal seine funktion genau lesen. danke + Multi-Zitat Zitieren
#24 16. November 2008 AW: C++ ToUpper Dann wurd's halt editiert, kann ich nicht erahnen, ich les nicht alles von vorne. + Multi-Zitat Zitieren