Talinger Geschrieben 15. Juni 2009 Geschrieben 15. Juni 2009 Moin leute, Ich hab das problem, dass ich in einer while bedingung einen Char mit einem leerzeichen vergleichen will bzw eigentlich will ich das es nicht gleich ist.. BSP: String helper="abcdefg"; while (helper[1]!=" ") { flag=flag+1; } Die Fehlermeldung lautet Konvertierung von Char nach Char* nicht möglich. Kann mir einer von euch helfen? Zitieren
Kati82 Geschrieben 15. Juni 2009 Geschrieben 15. Juni 2009 Eigentlich verstehe ich jetzt nicht ganz, was du machen willst. Aber wenn du herausfinden möchtest, ob ein String ein Leerzeichen enthält, dann verwende doch String->Contains(" "). Aber vielleicht erläuterst du nochmal, was du genau machen möchtest. Zitieren
Wodar Hospur Geschrieben 15. Juni 2009 Geschrieben 15. Juni 2009 Moin leute, Ich hab das problem, dass ich in einer while bedingung einen Char mit einem leerzeichen vergleichen will bzw eigentlich will ich das es nicht gleich ist.. BSP: String helper="abcdefg"; while (helper[1]!=" ") { flag=flag+1; } Die Fehlermeldung lautet Konvertierung von Char nach Char* nicht möglich. Kann mir einer von euch helfen? Ein einzelner Charakter wird durch einfache Hochkommatas ' eingefasst, Strings landen in doppelten ". Wahrscheinlich liegt darin schon dein Problem. Zitieren
regarn Geschrieben 15. Juni 2009 Geschrieben 15. Juni 2009 Hi, versuch einfach mal: String helper="abcdefg"; while (*(helper.begin()+i)!=' ') { flag=flag+1; } dabei steht i für die Position im String (i=0 ist dabei der erste char) und der dereferenzierte Iterator gibt ein char zurück. Zitieren
Klotzkopp Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 while (*(helper.begin()+i)!=' ') Das finde ich aber unnötig kompliziert. Wenn diese Stringklasse den Arrayoperator überlädt, warum ihn dann nicht benutzen? Wenn man die Leerzeichen im String zählen will, kann man aber besser gleich std::count benutzen. Zitieren
regarn Geschrieben 16. Juni 2009 Geschrieben 16. Juni 2009 Das finde ich aber unnötig kompliziert. Wenn diese Stringklasse den Arrayoperator überlädt, warum ihn dann nicht benutzen? Hmm da muss ich zugeben habe ich so noch nie verwendet. Aber da const char& operator[] ( size_t pos ) const; char& operator[] ( size_t pos ); kann man natürlich auch den Arrayoperator nehmen. Man lernt doch nie aus . Zitieren
Guybrush Threepwood Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 Abgesehen von der Endlosschleife wurde die Lösung oben schon genannt: Ein einzelner Charakter wird durch einfache Hochkommatas ' eingefasst, Strings landen in doppelten ". Wahrscheinlich liegt darin schon dein Problem. Zitieren
bouuman Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 Hallo, bin ziemlich neu auf diesen Gebiet und hab da ne Frage. Ich möchte einen eingegeben Text auslesen und in einer if anweisung vergleichen, Beispielsweise so: #include <conio.h> #include <stdio.h> #include <iostream.h> #include <cmath.h> #include <stdlib.h> using namespace std; void main(void) { char *text; printf("Geben Sie bitte beispielsweise 'hi' ein: "); scanf("%c",&text); if(text=="hi") { printf("Hallo, habe dich verstanden"); } else { printf("Ich verstehe diesen Ausdruck nicht: %c",text); } getch(); } ODER SO: #include <conio.h> #include <stdio.h> #include <iostream.h> #include <cmath.h> #include <stdlib.h> using namespace std; int main() { char *text; char buffer[256]; printf("Geben Sie 'hi' ein: "); text = fgets(buffer, 256, stdin); if(text == "hi") { printf("Hallo, ich konnte Sie verstehen "); } else { printf("Ich habe Sie nicht verstanden"); } getch(); return 0; } komm leider irgendwie nicht weiter , habt ihr mir einen tip? Zitieren
Klotzkopp Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 Welche Programmiersprache soll das denn sein? Das ist weder korrektes C noch C++. Zitieren
TDM Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 1. %s, nicht %c 2. ich vermisse ein malloc/new und free/delete. Bzw. den Zeiger einfach als Array deklararieren. 3. strcmp Welche Programmiersprache soll das denn sein? Das ist weder korrektes C noch C++. Naja, ansatzweise erkennt man ja C... Zitieren
Klotzkopp Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 Naja, ansatzweise erkennt man ja C...Ja, zum Teil. <iostream.h> deutet aber auf Prä-Standard-C++ hin. Zitieren
bouuman Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 sagte doch ich bin neu, habe erst in der schule angefangen C zu lernen und dafür das ich mich erst seid 2 wochen mit C beschäftige ist es doch schon mal was^^ . Jeder hat mal angefangen oder? Also wie wäre es den korrekt? Zitieren
Klotzkopp Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 sagte doch ich bin neu, habe erst in der schule angefangen C zu lernen und dafür das ich mich erst seid 2 wochen mit C beschäftige ist es doch schon mal was^^ .Ich weiß nicht, womit du dich in diesen 2 Wochen genau beschäftigt hast, aber es scheint mir eher veraltetes C++ gewesen zu sein. <iostream.h> ist ein veralteter C++-Header, weg damit.<cmath.h> gibt's gar nicht, weg damit.Namespaces gibt's in C auch nicht.<stdlib.h> brauchst du nicht, weg damit.Es muss int main heißen, nicht void main.Zeichenketten muss man in char-Arrays ablegen. Du hast da nur einen Zeiger, der nirgendwohin zeigt.Zeichenketten liest man mit %s ein, nicht %cStrings vergleicht man mit strcmp, nicht mit ==. Zitieren
bouuman Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 oh vielen dank! wusste nicht das ich strings nicht mit == vergleichen kann. kannst du mir ein beispiel geben wie ich das mit "strcmp" machen kann? also quasi ...if ( text == "blub" )... , wie das mit strcmp aussehen muss. Danke nochmals Zitieren
bouuman Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 oh vielen dank! wusste nicht das ich strings nicht mit == vergleichen kann. kannst du mir ein beispiel geben wie ich das mit "strcmp" machen kann? also quasi ...if ( text == "blub" )... , wie das mit strcmp aussehen muss. Danke nochmals ok ich glaube ich habe jetzt richtig angestzt #include <conio.h> #include <stdio.h> #include <iostream.h> void main(void) { char hi[] = "hi"; char input[100]; cin>>input; if(strcmp(hi, input) == 0) { printf("Hallo wie gehts?"); getch(); } else { printf("Ich verstehe dich nicht"); getch(); } } das funkzt jetzt^^ Zitieren
Klotzkopp Geschrieben 8. Oktober 2009 Geschrieben 8. Oktober 2009 das funkzt jetzt^^Das funktioniert nie im Leben. Wenn es doch funktioniert, dann nur, weil du den Code als C++ compilierst. C ist das nicht. Du solltest dich entscheiden, ob du C oder C++ lernen willst. Dieser üble Mischmasch bringt dich nicht weiter. Dein Code ist kein gültiges C, und ziemlich hässliches C++. Zitieren
bouuman Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 ja ich kanns leider noch nicht so richtig unterscheiden was c was c++ ist, aber es funktioniert Zitieren
bouuman Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 ausserdem sagt man doch das c code problemlos im c++ code verwendet werden kann, also versteh ich nicht worin das problem liegt. Zitieren
Klotzkopp Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 ja ich kanns leider noch nicht so richtig unterscheiden was c was c++ ist, aber es funktioniert Als C funktioniert dein Code nicht. Als C++ nur, weil dein Compiler veraltet ist. ausserdem sagt man doch das c code problemlos im c++ code verwendet werden kann, also versteh ich nicht worin das problem liegt.Wer ist denn "man"? Das ist nämlich Blödsinn. Es gibt jede Menge Sprachkonstrukte, die gültiges C, aber ungültiges C++ sind. C ist keine "Untermenge" von C++. Wenn du C lernen willst, solltest du keine Elemente aus C++ benutzen. Wenn du C++ lernen willst, solltest du nicht so programmieren, als ob du C benutzt. Die Sprachen mögen verwandt sein, aber die Art und Weise, wie man sie benutzt, kann sich stark unterscheiden. Dein Programm würde in C so aussehen: #include <stdio.h> #include <string.h> int main(void) { char hi[] = "hi"; char input[100]; scanf("%s",input); if(strcmp(hi, input) == 0) { printf("Hallo wie gehts?"); } else { printf("Ich verstehe dich nicht"); } }[/code] Und in C++ so: [code]#include <iostream> #include <string> int main() { using namespace std; string hi("hi"); string input; cin >> input; if(hi == input) { cout << "Hallo wie gehts?"; } else { cout << "Ich verstehe dich nicht"; } } Zitieren
bouuman Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 ok und was hälst du jetzt davon?^^ ( man = Unterschied zwischen C und C++ | aus Forum Programmierung allgemein | wer-weiss-was ) Probiers mal aus wenn man das hier weiter ausarbeitet kann man mit sich selbst chatten hahaha.. Du kannst in die Konsole: "hi", "wie gehts", "auch gut" und "ausruhen" eingeben und sie wird dir antworten. Probiers mal aus #include <conio> #include <stdio> #include <iostream> #include <string> void main() { using namespace std; bool bla; while ( bool bla=true ) { char input[100]; //als char deklariert weil unten cin.getline() verwendet wird string hi("hi"); string wg("wie gehts"); string ag("auch gut"); string ar("ausruhen"); //cin>>input; // Funkzioniert auch, jedoch interpretiert keine Leerzeichen cin.getline(input,100); //Leerzeichen bei z.b."wie gehts" werden akzeptiert if(hi==input) { cout<<"Hallo\n"; } else if(wg==input) { cout<<"gut und selbst?\n"; } else if(ag==input) { cout<<"na was treibst du so\n"; } else if(ar==input) { cout<<"ausruhen ist immer gut^^\n"; } else { cout<<"Ich verstehe dich nicht\n"; } bla = true; } } Zitieren
Klotzkopp Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 ok und was hälst du jetzt davon?^^ ( man = Unterschied zwischen C und C++ | aus Forum Programmierung allgemein | wer-weiss-was ) Der Antworter hat keine Ahnung. C++ ist keine "Erweiterung" von C. C ist zum größten Teil in C++ enthalten, aber eben nicht vollständig. Ich empfehle diese Seite: Incompatibilities Between ISO C and ISO C++ Und zu deinem Code: Hast du dich jetzt für C++ entschieden? #include <conio> [B]Gibt's nicht[/B] #include <stdio> [B]Gibt's auch nicht[/B] #include <iostream> #include <string> void main() [B]int main![/B] { using namespace std; bool bla; [b]hier fehlt eine Initialisierung[/b] while ( bool bla=true ) [B]Das ist eine Zuweisung, kein Vergleich. Das bool ist hier auch falsch.[/B] { char input[100]; //als char deklariert weil unten cin.getline() verwendet wird [B]Du kannst std::getline benutzen, dann kannst du auch strings verwenden.[/B] [/code] Zitieren
bouuman Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 #include <conio> [B]Gibt's nicht[/B] also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann. bool bla; while (bla = true ) Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch. std::getline(cin,input); Hat super geklappt mit String vielen Dank für den Tipp und noch ne kleine Frage ich bekomm es einfach nicht hin z.b. mit "enum" meiner Variablen(hi) mehrere Werte zuzuweisen wie "hi"="hallo"="hey"="hoi" ... weist was ich meine? Also Quasi ( String hi("hi","hallo",....); ). Kannst mir da weiter helfen? Zitieren
Klotzkopp Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann.Der Header heißt <conio.h>. Ist nicht Standard, aber weit verbreitet. Das automatische Schließen eines Konsolenprogramms verhinderst du aber besser anders: C/C++ Forum :: Automatisches Schließen verhindern Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch. Dann tut's auch while( true ) und noch ne kleine Frage ich bekomm es einfach nicht hin z.b. mit "enum" meiner Variablen(hi) mehrere Werte zuzuweisen wie "hi"="hallo"="hey"="hoi" ... weist was ich meine? Also Quasi ( String hi("hi","hallo",....); ). Kannst mir da weiter helfen?Man kann einer Variablen nicht mehrere Werte zuweisen. Eine Variable hat immer genau einen Wert. Meinst du vielleicht Arrays? Zitieren
TDM Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 also ohne conio kann ich die getch() Methode nicht verwenden. Wenn ich sie nicht habe dann leuft mein Programm einfach durch und die Konsole blinkt nur ganz kurz auf ohne das ich was lesen kann. cin.get(); Komm nicht drauf wo es hin muss , aber eigentlich erfüllts ja seinen Zweck, dass ist damit dass Programm sich nicht Beendet und immer wieder von vorne beginnt. Das tut ja auch. Zitieren
bouuman Geschrieben 9. Oktober 2009 Geschrieben 9. Oktober 2009 Man kann einer Variablen nicht mehrere Werte zuweisen. Eine Variable hat immer genau einen Wert. Meinst du vielleicht Arrays? ja kann sein Arrays, also wenn jemand in die Konsole z.b. "hi" Renschreibt soll sie Hallo antworten und wenn jemand "hallo" reinschreibt soll die Konsole ebenfalls Hallo antworten. Das wäre doch falsch für jedes Hallo eine Variable zu erstellen in etwa so: string hi("hi"); string hallo("hallo"); .... if ( hi||hallo == input) { cout<<"Hallo"\n; } Also muss man doch für eine Variable String hi.... mehrere "hi" auflisten können oder? Wie gesagt Quasi so: String hi("hi", "hallo", "hoi", "hey", "huhu"); Nur das es dann auch funktioniert Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.