Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 07:17

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Frage] C++

Discussion on [Frage] C++ within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
©rossi™'s Avatar
 
elite*gold: 0
Join Date: Jul 2010
Posts: 151
Received Thanks: 22
[Frage] C++

Hi ;

ich weiß die Frage ist ziemlich dumm (bin aber noob hab gerade erst angefangen).
Also ich wollte ne Konsolenanwendung machen , die die Hauptstädte einiger Länder ausgibt nur ich komme mit den if befehlen nicht klar xD also mein code sieht so aus :

Code:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string land;
    cout << "Geben sie ein europäisches land ein: ";
    cin >> land;

if (land == Italien)// mein problem !!!!! Da ich nicht weiß wies richtig geht
{
    cout << "Italiens Hauptstadt ist : Rom\n";
}
}
©rossi™ is offline  
Old 08/24/2010, 19:32   #2
 
Noisuf-X's Avatar
 
elite*gold: 38
Join Date: Dec 2008
Posts: 1,339
Received Thanks: 462
du musst auch land mit einem string vergleichen
oder du deklarierst irgentwo eine Variable Italien als string

Quote:
land == "Italien"
Noisuf-X is offline  
Thanks
1 User
Old 08/24/2010, 19:50   #3
 
©rossi™'s Avatar
 
elite*gold: 0
Join Date: Jul 2010
Posts: 151
Received Thanks: 22
thx das wars hab ich garnicht dran gedacht
©rossi™ is offline  
Old 08/24/2010, 20:12   #4
 
Bl@ze!'s Avatar
 
elite*gold: 240
Join Date: Dec 2006
Posts: 1,579
Received Thanks: 1,609
"==" ist ein (Vergleichs-)Operator.
Du solltest dir "Operatoren" anschauen und auch "Datentypen", dass wird dir bestimmt weiterhelfen
Bl@ze! is offline  
Old 08/25/2010, 19:35   #5
 
elite*gold: 0
Join Date: Jul 2007
Posts: 84
Received Thanks: 8
Kannst auch einen switch benutzen.

Code:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string land;
    cout << "Geben sie ein europäisches land ein: ";
    cin >> land;

switch(land)
{
   case Italien:
      cout << "Italiens Hauptstadt ist : Rom\n";
   default:
      cout << "blub"; // wenn gar nichts zutrifft
}
}
Ansonsten solltest du für das näcgste if "else if" verwenden.
IceTray is offline  
Old 08/25/2010, 21:32   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Quote:
Originally Posted by IceTray View Post
Kannst auch einen switch benutzen.

Code:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string land;
    cout << "Geben sie ein europäisches land ein: ";
    cin >> land;

switch(land)
{
   case Italien:
      cout << "Italiens Hauptstadt ist : Rom\n";
   default:
      cout << "blub"; // wenn gar nichts zutrifft
}
}
Ansonsten solltest du für das näcgste if "else if" verwenden.
Nein, kann er nicht.
1. bei dir ist der gleiche Fehler, Italien ist ohne "", also wird es als nicht deklarierter Variablenname angesehen
2. die case's bei einem switch Statement müssen einen int Wert haben, also kann man nur Zahlen oder Buchstaben behandeln

Code:
case 1:  //ok
case "1": //fehler
case '1': //ok
MrSm!th is offline  
Old 08/25/2010, 21:49   #7
 
Noisuf-X's Avatar
 
elite*gold: 38
Join Date: Dec 2008
Posts: 1,339
Received Thanks: 462
Quote:
Originally Posted by MrSm!th View Post
Nein, kann er nicht.
1. bei dir ist der gleiche Fehler, Italien ist ohne "", also wird es als nicht deklarierter Variablenname angesehen
2. die case's bei einem switch Statement müssen einen int Wert haben, also kann man nur Zahlen oder Buchstaben behandeln

Code:
case 1:  //ok
case "1": //fehler
case '1': //ok
zur genaueren Erklärung:
Bei switch ist in C/C++ und C++/CLI ist es nur möglich als int darstellbare Werttypen verwendet werden (char, short, int, long, Enurmerationen und bool). Bei .NET Sprachen kann man aber bei switch auch strings verwenden. Deswegen ist die Antwort nicht Kilometer weit her geholt aber trotzdem falsch.

Was ich bloß nicht verstehe ist warum es bei C# und VB.Net geht aber bei C++/CLI nicht.
Naja wer weiss schon was sich M$ dabei denkt.
Noisuf-X is offline  
Old 08/25/2010, 22:07   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Weil .NET komplett objekt-orientiert ist.
Bei C++ müsste der Compiler ja bei jedem case mit nem String einen Call zu strcmp,_tcscmp oder _wcscmp einsetzen, was nicht mehr der Definition von switch/case entspricht.
Bei einer komplett objekt-orientierten Sprache sind auch Int usw. Klasse, es macht also keinen Unterschied, ob der Operator == für einen Int oder für einen String aufgerufen wird, während wie gesagt bei C(++) nur bei Strings der Operator == bei strings oder eben die oben genannten Funktionen für Strings in Form eines Char Arrays eingesetzt werden müsste und bei int ein ganz normales cmp (asm befehl zum vergleichen von Ganzzahlen).

Ich denke mal, .NET unterstützt in seinem Bytecode auch Befehle zum Stringvergleichen...
MrSm!th is offline  
Old 08/25/2010, 22:43   #9
 
Noisuf-X's Avatar
 
elite*gold: 38
Join Date: Dec 2008
Posts: 1,339
Received Thanks: 462
Quote:
Originally Posted by MrSm!th View Post
Weil .NET komplett objekt-orientiert ist.
Bei C++ müsste der Compiler ja bei jedem case mit nem String einen Call zu strcmp,_tcscmp oder _wcscmp einsetzen, was nicht mehr der Definition von switch/case entspricht.
Bei einer komplett objekt-orientierten Sprache sind auch Int usw. Klasse, es macht also keinen Unterschied, ob der Operator == für einen Int oder für einen String aufgerufen wird, während wie gesagt bei C(++) nur bei Strings der Operator == bei strings oder eben die oben genannten Funktionen für Strings in Form eines Char Arrays eingesetzt werden müsste und bei int ein ganz normales cmp (asm befehl zum vergleichen von Ganzzahlen).

Ich denke mal, .NET unterstützt in seinem Bytecode auch Befehle zum Stringvergleichen...
Tut mir leid aber die Antwort ist vollkommen falsch.
Es ist nicht ganz so einfach wie du dir das vorstellst

Außerdem gibt es einen riesigen Unterschied zwischen C/C++ und C++/CLI wenn du den nicht kennst würde ich mal schleunigst nachlesen, C++/CLI kommt von M$ und ist Managed (also es hat die CLI als Runtime drunter genau wie die anderen .NET Sprachen) und ist nicht gleich C/C++.
Deswegen wunder ich mich auch warum das switch Statment nicht so wie in C# reagiert.

Und zu deinen komischen Aufstellungen:
1. .NET nicht komplett Objekt-orientiert es gibt da 3 Unterscheidungen Werttypen, Verweistypen und Zeigertypen. zb arbeitest du wenn du Objekte als Funktionsparameter übergibst immer mit der Referenz, Structs oder andere Werttypen werden immer kopiert.
2. int, char etc... sind in .NET Werttypen keine Klassen, bloß string ist ein Verweistyp.
3. du kannst im Switch Statment von zB C# nur string und (char, short, int, long, Enurmerationen und bool) vergleich, keine Objekte, kein float und keine Structs vergleichen.

Achso fast vergessen C++/CLI wird auch in die IL übersetzt genau wie C# oder VB.Netm deshalb nur mein Kommentar unter meinem letzten Post nicht weil ich zu blöd bin den Wald vor lauter Bäumen nicht zusehen.
Noisuf-X is offline  
Old 08/25/2010, 23:20   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
Quote:
Originally Posted by Noisuf-X View Post
Tut mir leid aber die Antwort ist vollkommen falsch.
Es ist nicht ganz so einfach wie du dir das vorstellst
Entschuldige, wie du schon sagst, vorstellte.
Das war eine Vermutung ;< Hab ich vielleicht nicht deutlich genug geschrieben.
Quote:
Außerdem gibt es einen riesigen Unterschied zwischen C/C++ und C++/CLI wenn du den nicht kennst würde ich mal schleunigst nachlesen, C++/CLI kommt von M$ und ist Managed (also es hat die CLI als Runtime drunter genau wie die anderen .NET Sprachen) und ist nicht gleich C/C++.
Deswegen wunder ich mich auch warum das switch Statment nicht so wie in C# reagiert.
Den Kenne ich, ich hab das C++/CLI so verstanden, dass C++ eine Sprache ist und CLI die .NET Erweiterung Q_Q
Da lag ich wohl völlig falsch, habe gerade nachgelesen, dass C++/CLI so zusammengehört (dachte du meinst einmal C++ und einmal C++ mit CLI)
Quote:
Und zu deinen komischen Aufstellungen:
1. .NET nicht komplett Objekt-orientiert es gibt da 3 Unterscheidungen Werttypen, Verweistypen und Zeigertypen. zb arbeitest du wenn du Objekte als Funktionsparameter übergibst immer mit der Referenz, Structs oder andere Werttypen werden immer kopiert.
2. int, char etc... sind in .NET Werttypen keine Klassen, bloß string ist ein Verweistyp.
Joa, ein bisschen habe ich schonmal gelesen über die Implementierung von .NET, das hatte ich jetzt mit Java verwechselt (das ist doch aber komplett oo, oder bin ich da nun auch falsch? Q_Q)
Quote:
3. du kannst im Switch Statment von zB C# nur string und (char, short, int, long, Enurmerationen und bool) vergleich, keine Objekte, kein float und keine Structs vergleichen.
Dann ist es evtl. einfach eine Designentscheidung, die von MS so getroffen wurde?
Warum muss man bei 2 Explorer Fenstern in das jeweilige klicken, damit man darin scrollen kann, warum wird der Fokus nicht automatisch vergeben?
MrSm!th is offline  
Reply




All times are GMT +1. The time now is 07:17.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.