Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

21

06.09.2013, 18:52

Ich habe deinen Quellcode mal auf Ideone laufen lassen:
http://ideone.com/Bc37Du
Sieht so aus, als ob er dort funktioniert. Ich denke, ich weiß auch warum. Du übergibst getline als Delimiter ein '\n'. Unter Windows wird der Zeilenumbruch als "\r\n" codiert. Deshalb steht in dem String ein "Hans\r" und das ist natürlich nicht das selbe wie "Hans". Lass mal den Delimiter von getline weg, er ist eh optional, dann sollte es auch so funktionieren.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

22

06.09.2013, 19:58

Zum Vergleichen kannst du auch die Funktion strcmp verwenden. Damit geht das recht einfach. Alternativ gibt es auch davon Varianten die Groß-/Kleinschreibung ignorieren oder auch die Unicode-Variante der Funktion. Mehr Infos dazu findest du z.B. hier: http://msdn.microsoft.com/de-de/library/…e(v=vs.90).aspx

Ich habe mal deinen Code entsprechend angepasst (aber nicht getestet):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
using namespace std; 
int main () 
{ 
char chName [20]; 
cout << "Dein Name: "; 
cin.get (chName, 19); 
if (strcmp(neededName, chName) == 0) 
cout << "Hallo, Hans!"; 
else 
cout << "Falsche eingabe!"; 
return 0; 
}

Wenn du es natürlich richtig Hardcore machen möchtest, dann Vergleichst du selbst in einer Schleife jeden Buchstaben. Aber warum das Rad neu erfinden ;)
Hey, Wow das funktioniert, Danke! :thumbsup: Allerdings ist das Thema damit denke ich nicht beendet, denn es scheint ja noch mehr Möglichkeiten zu geben! ;)

Ist ja nicht so, als hätte ich strcmp eine Seite zuvor bereits präsentiert... ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

23

07.09.2013, 11:29

Zum Vergleichen kannst du auch die Funktion strcmp verwenden. Damit geht das recht einfach. Alternativ gibt es auch davon Varianten die Groß-/Kleinschreibung ignorieren oder auch die Unicode-Variante der Funktion. Mehr Infos dazu findest du z.B. hier: http://msdn.microsoft.com/de-de/library/…e(v=vs.90).aspx

Ich habe mal deinen Code entsprechend angepasst (aber nicht getestet):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
using namespace std; 
int main () 
{ 
char chName [20]; 
cout << "Dein Name: "; 
cin.get (chName, 19); 
if (strcmp(neededName, chName) == 0) 
cout << "Hallo, Hans!"; 
else 
cout << "Falsche eingabe!"; 
return 0; 
}

Wenn du es natürlich richtig Hardcore machen möchtest, dann Vergleichst du selbst in einer Schleife jeden Buchstaben. Aber warum das Rad neu erfinden ;)
Hey, Wow das funktioniert, Danke! :thumbsup: Allerdings ist das Thema damit denke ich nicht beendet, denn es scheint ja noch mehr Möglichkeiten zu geben! ;)

Ist ja nicht so, als hätte ich strcmp eine Seite zuvor bereits präsentiert... ;)
Ja, das schon aber ich hatte ja keine Ahnung, wie man das verwendet ;) natürlich danke ich trotzdem. Denn das ich nicht weiß wie man das verwendet is ja nicht deine schuld :)

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

24

07.09.2013, 11:37

Natürlich ist es nicht meine Schuld. ;)
Es ist deine Aufgabe dich darüber zu informieren, man kaut ja nicht alles vor. Außerdem ist dort auch eine Beispielcode. Der hätte eig. alles sagen müssen.
Zukünftig solltest du dich näher mit den Informationen die man dir gibt auseinandersetzen und selbst den Kopf etwas anstrengen, denn irgendwann hast du ein Problem, was dir niemand vorkauen kann.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

25

08.09.2013, 21:02

Natürlich ist es nicht meine Schuld. ;)
Es ist deine Aufgabe dich darüber zu informieren, man kaut ja nicht alles vor. Außerdem ist dort auch eine Beispielcode. Der hätte eig. alles sagen müssen.
Zukünftig solltest du dich näher mit den Informationen die man dir gibt auseinandersetzen und selbst den Kopf etwas anstrengen, denn irgendwann hast du ein Problem, was dir niemand vorkauen kann.
Ich habe mich angestrengt, nur habe ich mich erst auf std::string konzentriert und dahin recherchiert. Wenn du den Code von alchy meinst, dann hat er auch alles geklärt. Allerdings muss ich zugeben, dass ich auf einige Dinge trotzt suche und den Kopf anstrengen nicht komme. ^^

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


26

08.09.2013, 22:46

Da ich mir nicht ganz sicher bin, welche Lösung du jetzt genau benutzt, möchte ich dir einmal mehr Nahelegen, std::string zu benutzen. Der Code schreibt sich einfacher und ist wesentlich robuster. Mit char-Arrays kann man vieles hinschreiben und kompilieren, was totaler Blödsinn ist, bei std::string ist das fast unmöglich. Ich bin damals komplett darauf umgestiegen, als mein Programm mal wieder wegen eines zu kleinen char-Arrays abgestürzt ist - und bin seit dem glücklich.
Lieber dumm fragen, als dumm bleiben!

27

12.09.2013, 17:10

Da ich mir nicht ganz sicher bin, welche Lösung du jetzt genau benutzt, möchte ich dir einmal mehr Nahelegen, std::string zu benutzen. Der Code schreibt sich einfacher und ist wesentlich robuster. Mit char-Arrays kann man vieles hinschreiben und kompilieren, was totaler Blödsinn ist, bei std::string ist das fast unmöglich. Ich bin damals komplett darauf umgestiegen, als mein Programm mal wieder wegen eines zu kleinen char-Arrays abgestürzt ist - und bin seit dem glücklich.
Ja, ich werd nochmal versuchen mich da reinzuarbeiten, denn es scheint wirklich besser geeignet zu sein. :thumbup:

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


28

15.09.2013, 16:06

Ich habe deinen Quellcode mal auf Ideone laufen lassen:
http://ideone.com/Bc37Du
Sieht so aus, als ob er dort funktioniert. Ich denke, ich weiß auch warum. Du übergibst getline als Delimiter ein '\n'. Unter Windows wird der Zeilenumbruch als "\r\n" codiert. Deshalb steht in dem String ein "Hans\r" und das ist natürlich nicht das selbe wie "Hans". Lass mal den Delimiter von getline weg, er ist eh optional, dann sollte es auch so funktionieren.




Ich habe den delimiter jetzt weggelassen und nochmal herumprobiert aber es ist leider immer noch nicht richtig ?( Kann es sein, dass du auf Ideone den Code auf C++11 laufen hast lassen und es deshalb funktioniert? Zur Übersicht nochmal der code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream> 
using namespace std; 
int main () 
{ 
std::string passwd; 
getline(cin, passwd);//error C3861: "getline": Bezeichner wurde nicht gefunden. 
if(passwd == "abcdef")//error C2678: Binrer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'std::string' akzeptiert 
{ // (oder keine geeignete Konvertierung mglich) 
cout<<"Access allowed"; 
} 
return 0; 
}

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

29

15.09.2013, 16:23

Probier es mal mit std::cin.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

30

15.09.2013, 16:49

Du hast #include <string> vergessen... ;)

Werbeanzeige