Wo liegt der Fehler?! Wer kann mir helfen?
-
Naja gut!
Ich versuchs mal mit den Arrays!
THX!

-
Crew06ZW schrieb:
Ich bin ja wie gesagt noch nicht so lang dabei... was stimmt daran nicht bzw was ist daran Unfug?!
Alles Relevante

Ich gehe jetzt mal von dem zu Anfang gezeigten Code aus:
char password = 'bla';Hier hast du bereits zweieinhalb Fehler drin. Zu erst einmal ist wie Bitwax schon sagte, ein Stringliteral in Anführungszeichen zu setzen. Dann ist char der Datentyp für einen einzelnen Buchstaben. Du kannst in einer solchen Variable keinen String speichern. Deshalb wird in C die Konvention verwendet, dass man Zeichenketten in Form eines Zeigers (char*) auf das erste Element übergibt. Das Ende der Zeichenkette wird dann mit einem Nullbyte ('\0', als Integer eine einfache 0) angegeben. Ebendeshalb müsstest du mindestens "char* password" schreiben.
Stringliterale liegen in nicht veränderbaren Speicher. Deswegen haben sie den Datentype "const char*" statt char*. Das ist der halbe Fehler, denn aus Gründen der Abwärtskompatibilität kann man Stringliterale trotzdem einem char* zuweisen.
Falls in diese Variable aber das Passwort hinein sollte, dann musst du ein Array verwenden (s. BitWax'-Post).Crew06ZW schrieb:
if(passwort == 'bla' )
Das ist eine verzwickte Stelle. Würdest du hier statt std::string (s.u.) einen C-String (also const char*) benutzen kann dieser Vergleich unbeanstandet durch den Compiler gehen (mit syntaktisch korrektem Literal natürlich), wird aber nicht das tun, was du wolltest (der Fehler ist auch bei BitWax noch drin ;)). Du vergleichst hier höchstens die Werte der Zeiger, also Speicheradressen. Du kannst zwar mit strcmp auch C-Strings vergleichen, aber besser gehts mit:
std::stringCrew06ZW schrieb:
Meinst du damit ich soll das PW als einen String angeben?!
Das tust du bereits. Ich meine damit, dass du die C++-Klasse std::string verwenden sollst. Denn mit dieser tut der Vergleich auch was er soll.
Hast du kein Lehrbuch oder Tutorial?
-
Zum Vergleichen von Strings nimmt man strcmp und nicht ==.
-
Okay, okay!
Dank eurer Hilfen sind meine Kompilerfehlermeldungen stark gesunken, aber es läuft immer noch net!
Das mit den Arrays hab ich hinbekommen aber das mit den strings nun versteh ich nicht!

Was soll ich nun mit std::string machen?!
Mein Quellcode sieht bisher so aus:
#include <cstdlib> #include <iostream> using namespace std; int main() { char passwort[8] = "bla"; cout << "Hallo!" << endl; cout << endl; cout << "Bitte geben sie Ihr Passwort ein: "; cin >> passwort; if(passwort == "bla" ) { cout << "Loginbereich"; } else { cout << "Falsches Passwort!" << endl; } system("PAUSE"); return 0; }Nun?! Was muss ich nun mit den String machen?
-
Also: includiere den Header "string". Anschließend statt "char passwort[8];" schreibe "string passwort". Und dann in der if-Anweisung nicht 'passwort == "bla"' sondern "strcmp (passwort, "bla") == 0"
-
@BitWax: nicht ganz...
#include <cstdlib> #include <iostream> #include <string> // für std::string using namespace std; int main() { std::string passwort; // hier std::string verwenden! cout << "Hallo!" << endl; cout << endl; cout << "Bitte geben sie Ihr Passwort ein: "; cin >> passwort; if(passwort == "bla" ) // weil du std::string benutzt funktioniert der Vergleich { cout << "Loginbereich"; } else { cout << "Falsches Passwort!" << endl; } system("PAUSE"); return 0; }
-
BitWax schrieb:
Und dann in der if-Anweisung nicht 'passwort == "bla"' sondern "strcmp (passwort, "bla") == 0"
Die std::string-Klasse bringt aber einen schönen Vergleichsoperator mit sich

-
Ich hab mal ne Frage zu dem Code:
#include <cstdlib> #include <iostream> using namespace std; int main() { char passwort[8] = "bla"; /* Was bringt die Zuweisung hier? * Mit cin>>passwort "überschreibt" * man passwort doch so wie so nochmal?! * Oder? */ cout << "Hallo!" << endl; cout << endl; cout << "Bitte geben sie Ihr Passwort ein: "; cin >> passwort; if(passwort == "bla" ) // Die prüfung findet doch so wie so hier statt?! { cout << "Loginbereich"; } else { cout << "Falsches Passwort!" << endl; } system("PAUSE"); return 0; }
-
Die Zuweisung bringt gar nichts. Ich habe schon versucht ihm das zu erklären, aber naja.
@ die anderen: JAJA IST JA GUT

Und std::string ist sinnlos, da er using namespace std; gemacht hat.
-
So... okay!
Ich bin glaub ich kurz davor das Programm zum laufen zu bekommen!
So siehts bis jetzt aus:
#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string passwort[25]; passwort[25] = "bla"; cout << "Hallo!" << endl; cout << endl; cout << "Bitte geben sie Ihr Passwort ein: "; cin >> passwort[25]; if(strcmp (passwort, "bla") == 0 ) { cout << "Moin!"; } else { cout << "Falsches Passwort!" << endl; } system("PAUSE"); return 0; }Jetzt gibt es nur noch ein Problem... meinKompiler heult bei dieser stelle rum:
if(strcmp (passwort, "bla") == 0 )Meldung:
cannot convert `std::string*' to `const char*' for argument `1' to `intKompiler: DevC++
Was ist falsch?!
-
Mir scheint es, du hast die letzten Posts nicht 100%ig verstanden. Also erstmal ist ein string bereits eine Art char-Array. Dann wurde hier auch schon gesagt, dass man strings auch mit == vergleichen kann. Außerdem bringt es dir nichts, die Variable "passwort" mit einem Wert zu füllen, da "passwort" eh vom User wieder überschrieben wird. Alles in allem:
#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string passwort; cout << "Hallo!" << endl; cout << endl; cout << "Bitte geben sie Ihr Passwort ein: "; cin >> passwort; if (passwort == "bla") { cout << "Moin!"; } else { cout << "Falsches Passwort!" << endl; } system("PAUSE"); return 0; }EDIT: Such dir mal im I-Net ein paar Tutorials über C++ raus.
-
BitWax hat einen Fehler gemacht. Er sagte, dass du strcmp verwenden sollst. Das wurde aber von mir und The-Kenny bereits korrigiert. Also
nochmal lesen.BitWax schrieb:
Und std::string ist sinnlos, da er using namespace std; gemacht hat.
Ich nutze fast nie using namespace std. Deshalb schreibe ich immer std::string

Gruß
Don06
-
Also erstmal: Ein Fehler wenn man mit string arbeitet. Aber ja, ein Fehler.
Don06 schrieb:
BitWax schrieb:
Und std::string ist sinnlos, da er using namespace std; gemacht hat.
Ich nutze fast nie using namespace std. Deshalb schreibe ich immer std::string

hmmm, mir ist das zuviel, unnötige Schreibarbeit (wobei ich sowas aus der WinAPI gewohnt bin)
-
Ich bezog mich auf diesen Beitrag:
BitWax schrieb:
Also: includiere den Header "string". Anschließend statt "char passwort[8];" schreibe "string passwort". Und dann in der if-Anweisung nicht 'passwort == "bla"' sondern "strcmp (passwort, "bla") == 0"
Du hast nur vor mir gepostet

Gruß
Don06
-
Ja, dachte ich mir schon. Aber irgendwie haben wir beide den Thread gerade übernommen (?). Oder er ist so fertig von dem Zeug das er sich...nun...schlafen gelegt hat

-
Ah!!! Okay! Jetzt wird mir alles klar....
Es gehts! JUHU!!!!
DANKE AN ALLE DIE GEHOLFEN HABEN!
Ich hab wieder einiges dazu gelernt!
Ich habe die Video2Brain DVD mit Helge Maus. Dort bin ich gerade dabei mir Funktionen mit Rückgabewerten anzusehen...
Zeiger, Referenzen... kommt alles noch!
Wie ihr seht bin ich echt noch am Anfang, sodass solche "kleinen" Fehler passieren können! (finde ich zumindest)
Das mit den Strings sind wieder solche "Kleinigkeiten", das erwähnen die im Video gar net... daher bin ich sehr erfreut über die Infos mit den Überschreiben etc...
Parallel will ich mal gucken wie das erstellen optischer bzw grafischer Flächen mit C++ geht... da hör ich immer WinAPI und GUI... kp was das ist und wie man das lernen kann... keinen Bock mehr auf diese Konsolenanwendungen!^^
Wenn jemand tolle Links oder so hat, kann sie ja mal per KN oder so schicken!
Nochmal danke für eure Hilfe!
-
Lass die GUI-Programmierung ersteinmal am Rand liegen. Das weiß ich aus Erfahrung. Ich konnte noch nichteinmal richtig C++, da habe ich schon mit Fenstern angefangen. War extrem schwierig...musste erst nocheinmal richtig in C++ rein, und dann ging es halbwegs.
-
Ich will ja hier nicht vom Thema oder ins falsche Thema ablenken, aber was ist GUI und WiNAPI?!
Für was bruahc ich das?! Wo kann ich es lernen?! Wann kann ich damit anfnagen?!
-
GUI = Graphical User Interface = Grafische Benutzeroberfläche = Fenster, etc.
Anfangen: sobald du sicher in C++ bist
WinAPI = Schnittstelle, um über C/C++ Fenster zu erstellen
Wo: Hmm, einfach mal im I-Net und hier in der SuFu suchen
-
BitWax schrieb:
GUI = Graphical User Interface = Grafische Benutzeroberfläche = Fenster, etc.
WinAPI = Schnittstelle, um über C/C++ Fenster zu erstellen
Das klingt verdammt gleich!
Naja! Ich erkundige mich mal genauer!
Jetzt sehe ich mich mal nach den system("PAUSE"); um....
Das soll gar nicht mal so gut sein! hab hier im Forum mal was von nem Moderator drüber gelsen! Ich geh mal suchen!^^Mal sehen was man lernen kann!^^
Danke für Eure Hilfe!
Hat mir Spass gemacht!
