|
You last visited: Today at 07:17
Advertisement
[Frage] C++
Discussion on [Frage] C++ within the C/C++ forum part of the Coders Den category.
08/24/2010, 18:51
|
#1
|
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";
}
}
|
|
|
08/24/2010, 19:32
|
#2
|
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:
|
|
|
08/24/2010, 19:50
|
#3
|
elite*gold: 0
Join Date: Jul 2010
Posts: 151
Received Thanks: 22
|
thx das wars hab ich garnicht dran gedacht
|
|
|
08/24/2010, 20:12
|
#4
|
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
|
|
|
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.
|
|
|
08/25/2010, 21:32
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
|
Quote:
Originally Posted by IceTray
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
|
|
|
08/25/2010, 21:49
|
#7
|
elite*gold: 38
Join Date: Dec 2008
Posts: 1,339
Received Thanks: 462
|
Quote:
Originally Posted by MrSm!th
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.
|
|
|
08/25/2010, 22:07
|
#8
|
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...
|
|
|
08/25/2010, 22:43
|
#9
|
elite*gold: 38
Join Date: Dec 2008
Posts: 1,339
Received Thanks: 462
|
Quote:
Originally Posted by MrSm!th
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.
|
|
|
08/25/2010, 23:20
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,397
|
Quote:
Originally Posted by Noisuf-X
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?
|
|
|
All times are GMT +1. The time now is 07:17.
|
|