suche empty() funktion für c++
Daniel
- sonstiges
hi leutz, guckt euch einfach mal das hier an:
error = 0;
do
{
if(error == 1)
{
printf("\nKeine name!");
}
printf("\n\nSie haben sich f\x81r den Multiplayer Modus entschieden!\n\nBitte geben Sie den Namen der ersten Person an: ");
scanf("%c", &firstperson);
error = 1;
}
while(firstperson == '');
das ganze hier ist C++ kein php, daher gibt es keine funktion wie empty() und firstperson == '', kann ich leider nicht benutzen, da kommt nur nen fehler:
error C2137: leere Zeichenkonstante
Weiß einer von euch wie ich das in einem C++ programm sonst noch umsetzen kann?
lg dani
Hallo Daniel
das ganze hier ist C++
Das ist eher C als C++ ...
kein php, daher gibt es keine funktion wie empty() und firstperson == '', kann ich leider nicht benutzen, da kommt nur nen fehler:
strlen() sollte Dir weiterhelfen.
Weiß einer von euch wie ich das in einem C++ programm sonst noch umsetzen kann?
Mit dem String-Typ der Standardbibliothek, std::cin, std::cout, ...
Freundliche Grüße
Vinzenz
你好 Vinzenz,
kein php, daher gibt es keine funktion wie empty() und
firstperson == '', kann ich leider nicht benutzen, da kommt nur nen
fehler:strlen() sollte Dir weiterhelfen.
Wuah, damit wuerde man gleich einen lesenden Zugriff auf Bereiche
ausserhalb des Stacks produzieren. Mit dem scanf()-Aufruf sogar sehr
wahrscheinlich einen schreibenden (abhaengig von der Eingabe und der
Groesse von firstperson)...
再见,
克里斯蒂安
error = 0;
do
{if(error == 1)
{
printf("\nKeine name!");
}printf("\n\nSie haben sich f\x81r den Multiplayer Modus entschieden!\n\nBitte geben Sie den Namen der ersten Person an: ");
scanf("%c", &firstperson);error = 1;
}
while(firstperson == '');das ganze hier ist C++ kein php,
Richtig, das ganze ist C, kein C++. In C++ könntest du ganz elegant auf solche gefährlichen Konstrukte wie scanf verzichten und würdest das ganze sicher mit Streams erledigen. Außerdem brauchst du dann kein printf, sondern ebenfalls Streams.
daher gibt es keine funktion wie empty() und firstperson == '', kann ich leider nicht benutzen, da kommt nur nen fehler:
error C2137: leere Zeichenkonstante
Nun, was für ein Datentyp soll den firstperson sein? Wenn das ein C-String ist, dann ist firstperson = '' schonmal Quatsch, aber ich gehe davon aus, dass du irgendwo stehen hast
char firstperson;
Mit der Anweisung firstperson = '' versuchst du, diesem Zeichen etwas sinnloses zuzuweisen (ein leeres Zeichen, was soll das sein?), du meinst wahrscheinlich aber eine Art Null-Wert. Deshalb probier doch
z.B. firstperson = '\0';
aus. Ist firstperson dagegen tatsächlich ein C-String, täte es ein simples
firstperson = 0;
Grüße, Robert
你好 Robert,
[...] Ist firstperson dagegen tatsächlich ein C-String, täte es ein
simplesfirstperson = 0;
Nein. 0 ist nicht das gleiche und schon gar nicht dasselbe wie NULL.
再见,
克里斯蒂安
你好 Robert,
Moin!
[...] Ist firstperson dagegen tatsächlich ein C-String, täte es ein
simplesfirstperson = 0;
Nein. 0 ist nicht das gleiche und schon gar nicht dasselbe wie NULL.
Ich merke, da kennt einer C++. Ich kenne soweit keine Architektur, die _großartig_ zwischen ((*void)0) aka NULL bzw. 0 unterscheidet. OK, das erste ist ein waschechter Pointer, während das zweite ein impliziter Cast eines int nach char* darstellt.
再见,
克里斯蒂安
Yo man, Robert
你好 Robert,
[...] Ist firstperson dagegen tatsächlich ein C-String, täte es ein
simplesfirstperson = 0;
Nein. 0 ist nicht das gleiche und schon gar nicht dasselbe wie NULL.
Ich merke, da kennt einer C++.
Eher C :)
Ich kenne soweit keine Architektur, die _großartig_ zwischen ((*void)0)
aka NULL bzw. 0 unterscheidet.
Man weiss nicht, was “da draussen”[tm] fuer Compiler rumschwirren.
Ausserdem ist es mieser Stil! :)
再见,
克里斯蒂安
Hi,
das ganze hier ist C++ kein php, daher gibt es keine funktion wie empty()
Dann bastel Dir doch eine?
und firstperson == '',
Die Hochkommas _müssen_ gefüllt sein, da sie schon beim Kompilieren benutzt werden. Du verwechselst das wahrscheinlich mit Anführungszeichen (""), die einen leeren String kennzeichnen.
Weiß einer von euch wie ich das in einem C++ programm sonst noch umsetzen kann?
Wenn man denn wüßte, was Du genau möchtest, könnte man das mit Sicherheit. (sofern überhaupt berechenbar)
Normales Einlesen eines Strings von der Konsole:
#include <iostream>
#include <string>
int main()
{
using std::cin;
using std::cout;
using std::string;
cout << "Bitte Namen eingeben:";
string firstperson;
std::getline(cin, firstperson);
cout << firstperson + "\n";
string together = firstperson + "|";
cout << "Bitte nächsten Namen eingeben:";
string nextperson;
std::getline(cin, nextperson);
cout << nextperson + "\n";
together = together + nextperson;
cout << together + "\n";
return 0;
}
(Diese Zeilen sind mit Bedacht so gewählt. Nur bevor jemand schreit ;-)
In eine Schleife packen kannst Du das selber? Gut.
Nun ist der Code allerdings etwas problematisch, wie Du mit Sicherheit festgestellt haben wirst. Erstens weißt Du jetzt immer noch nicht, wie Du aus der Schleife rauskommst, sprich: wann der Benutzer genügend Namen eingegeben hat, zweitens darf mit der Sammelmethode der Limiter '|' nicht im Namen vorkommen und drittens hast Du am Ende einen langen String der a) evt _zu_ lang ist und b) den Du am Ende auch wieder auseinanderklamüsern mußt. D'rum ein paar Hinweise.
Für das Erste:
Die Variabel ist nie leer, da auch ohne Namen der Benutzer die Returntaste betätigen muß um weiterzukommen. Mehr aber auch nicht! (Es geht auch anders, aber das kannst Du am Anfang getrost ignorieren. Auch gar nicht erst fragen, sonst gibt's einen etwas länglichen Vortrag über IPC und Konsorten ;-). Der Name kann ziemlich lang werden, darf er das?
Für das Zweite:
Naja, dürfte wohl kein Problem sein, da eine Abfrage einzubauen, ob ein '|' im eingegeben String vorkommt, oder? BTW: nicht _vorher_ darauf hinzuweisen, das ein(ige) bestimmte(s) Zeichen nicht in "Namen" vorkommen dürfen ist als Bug anzusehen und zu reparieren.
Für das Dritte:
In der bereits von Christian angesprochenen STL gibt es dafür geeignete Mittel, siehe z.B. http://www.mochima.com/tutorials/STL.html für Erklärungen und Beispiele eines geeigneten Bereiches.
Immer sinnvoll natürlich die FAQ.
so short
Christoph Zurnieden