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

1

03.09.2013, 12:38

[Gelöst] Problem mit string abfrage!

Hallo, ich habe ein Problem wenn ich den String eines char Arrays abfragen will, welchen ich zuvor per cin.get eingegeben habe!

Hier der Quellcode:

C-/C++-Quelltext

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 (chName == "Hans") //Hier müsste das Problem liegen 
cout << "Hallo, Hans!"; 
else 
cout << "Falsche eingabe!"; 
return 0; 
}

Es wäre schön wenn man mir weiterhelfen könnte, das Problem schein in der Abfrage zu liegen.
Danke für die Hilfe, schon im voraus.:search:

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Suskritor« (16.09.2013, 16:23)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

03.09.2013, 12:48

chName == "Hans" vergleicht zwei Pointer und nicht die Strings, auf die sie zeigen... ;)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

03.09.2013, 12:50

Wenn du schon mit C++ anfängst, dann solltest du auch C++ nutzen -> std::string ;)
Warum übergibst du nur 19 obwohl der String 20 Zeichen hat? cin.get (chName, 19);
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

04.09.2013, 12:19

Wenn du schon mit C++ anfängst, dann solltest du auch C++ nutzen -> std::string ;)
Warum übergibst du nur 19 obwohl der String 20 Zeichen hat? cin.get (chName, 19);
Ich habe das gemacht wie es in dem Buch von Heiko Kalista mit char Arrays beschrieben wird und das 20. ist für \0. Das mit std::string wie funktioniert das, bzw. welchen Datentyp benötige ich dazu? (Hab das im Buch leider nicht gefunden :)) :hmm:

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


5

04.09.2013, 12:22

chName == "Hans" vergleicht zwei Pointer und nicht die Strings, auf die sie zeigen... ;)

Wie kann ich dann die strings vergleichen? Ich wusste nicht das Ich damit Zeiger erstellt habe. Danke für den Tipp.

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

04.09.2013, 12:24

Wenn du schon mit C++ anfängst, dann solltest du auch C++ nutzen -> std::string ;)
Warum übergibst du nur 19 obwohl der String 20 Zeichen hat? cin.get (chName, 19);
Ich habe das gemacht wie es in dem Buch von Heiko Kalista mit char Arrays beschrieben wird und das 20. ist für \0. Das mit std::string wie funktioniert das, bzw. welchen Datentyp benötige ich dazu? (Hab das im Buch leider nicht gefunden :)) :hmm:

http://www.cplusplus.com/reference/string/string/
chName == "Hans" vergleicht zwei Pointer und nicht die Strings, auf die sie zeigen... ;)

Wie kann ich dann die strings vergleichen? Ich wusste nicht das Ich damit Zeiger erstellt habe. Danke für den Tipp.

http://www.cplusplus.com/reference/cstring/strcmp/
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

04.09.2013, 13:36

chName == "Hans" vergleicht zwei Pointer und nicht die Strings, auf die sie zeigen... ;)

Wie kann ich dann die strings vergleichen? Ich wusste nicht das Ich damit Zeiger erstellt habe. Danke für den Tipp.

Nun, dein chName ist vom Typ char[20] und "Hans" ist vom Typ const char[5]. Für Arrays gibt es keinen == Operator, aber Arrays können implizit in Zeiger auf das erste Element umgewandelt und diese Zeiger miteinander verglichen werden. Und genau das passiert in deinem Beispiel. Da es sich aber um zwei verschiedene Arrays handelt (die an unterschiedlichen Adressen im Speicher liegen), wird dieser Vergleich, selbst wenn die Arrays den gleichen Inhalt haben, immer false zurückgeben.

std::strcmp() bzw. std::strncmp() wurden ja bereits genannt. Es wäre sicher auch keine schlechte Übung, dir selbst eine Funktion dafür zu basteln... ;)

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

8

04.09.2013, 17:45

mein c++ ist zwar schon recht eingerostet, aber geht das nicht einfacher mit dem .compare operator?
also:

std:string string1("something");
std:string string2("something different");

string1.compare(string2) -> wenn das ergebnis 0 ist, dann sind die beiden ident

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

04.09.2013, 17:47

Wenn du std::string benutzt, kannst du auch einfach == verwenden... ;)

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

10

04.09.2013, 18:29

mein c++ ist zwar schon recht eingerostet, aber geht das nicht einfacher mit dem .compare operator?
also:

std:string string1("something");
std:string string2("something different");

string1.compare(string2) -> wenn das ergebnis 0 ist, dann sind die beiden ident

Hast du Java Hintergrund?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige