Hi! Ich fange gerade an C++ zu elrnen, und jetzt sagt mir das Ding das hier ein fehler drinne ist:
#include <iostream.h>.
void main()
{
cout << "Hi! Ich bin dein PC! Wer bist du?\n";
cin >> name;
#ifdef name
cout "Hallo" name;
#endif
}
Dabei steht es in dem buch mit dem ich lerne das es so klappen müsste!
int main(int argc, char** argv)
{
cout << "Hi! Ich bin dein PC! Wer bist du?"<<endl;
string name;
cin >> name;
cout << "Hallo " <<name<<endl;
return 0;
}
...
Ich kann schon gar nicht mehr zaehlen, wieviele bloedsinnige Fehler in dem Beispiel waren ... Ich bin sogar versucht, zu fragen, fuer welche Sprache der Beispielcode war ... An deiner Stelle wuerde ich das Buch wechseln .... zumindest wenn der Code wirklich dort so drin steht ...
Oder probier es so:
(Maximal 20 Buchstaben, keine Leerzeichen eingeben!)
Ist etwas unflexibel, dafür ohne extra String-Header.
Der Rückgabewert der Mainfunktion muss immer int sein. Dein Buch behandelt eine veraltete Schreibweise wie es früher mal gängig war, mit void.
Die Parameter in der Main-Funktion von Ineluki kannst du auch weglassen, lass die Klammern einfach leer, ist einfacher. (Und afaik ist Lukis Variante eine C-Main-Funktion.)
Return 0 bedeutet, dass die Funktion den Rückgabewert 0 zurückgibt. Wird genutzt um Fehler zurückzugeben, 0 bedeutet hier dann also, korrekt beendet, ohne Fehler.
Merk dir einfach, wenn du später eigene Funktionen hast, kannst du per Return einen Wert zurückgeben lassen.
Ansonsten hast du bei cout noch einmal die spitzen Klammern (<<) vergessen gehabt, sowie die alte Header-Schreibweise iostream.h ist veraltet. Hier gilt, ohne .h, dafür ein using namespace std; darunter schreiben.
#if, #elif und #else sind Praeprozessoranweisungen
Die werden ausgewertet, bevor dein Programm ueberhaupt compiliert wird, z.B. um verschiedenen code fuer verschiedene Betriebssysteme zu erzeugen oder automatisch Text durch anderen Text zu ersetzen.
Das was du suchst, ist if und else ... ausserdem musst du gut und schlecht in "" setzen, da du einen string mit einem anderen String vergleichen willst
Dies ist aber ein gefährlicher Lösungsansatz, der bei einem zu langen Namen zu einem Bufferoverflow und damit Programmabsturz führt. Solange der Applikationsbenutzer deine vorgegebenen Regeln einhält, ist alles im Lot. Allerdings sind Menschen keine Maschinen, und deshalb machen wir schneller Fehler als uns lieb ist.
Mir ist klar, dass das Ganze natürlich nur ein Beispiel von dir war und daher nicht druchgängig hieb- und stichfest sein muss. Aber grade, wenn man einem Anfänger helfen will, sollte man imo (vielleicht dann sogar besonders) auf solche Tücken hinweisen.
@ Feenstaub:
Sicherlich magst du Recht behalten, aber trotzdem glaube ich, interessiert ihn jetzt noch kein Überlauf irgendwelcher Speicherstellen, wenn schon ein simples Hello World Probleme macht. Es war ja mehr ein Beispiel zum Ansehen der Syntax nicht der Vorgehensweise für Stringoperationen.
Aber da du ihn ja nun drauf aufmerksam gemacht hast, hat sich das ja nun auch geklärt.
Übrigens muss ich mich noch korrigieren, bei meinem obigen Code dürfen maximal 19 Zeichen, nicht 20, eingegeben werden.
Das wird hier else if() geschrieben.
Dir würde es nicht schaden, wenn du dir ein grundlegendes Tutorial über C++ ansehen würdest, da werden solche einfachen Fragen direkt geklärt.
Hi Leuts. ich fang auch gerade an und hab schon n paar Tuts gemacht. Ich dachte, der Fehler liegt an dem vielleicht verältertem Tut aber als der gleiche Fehler auch bei Ineluki's Code ganz unten zur Verbesserung von dem alten Tut aufgetreten ist, wurde ich doch stutzig:
Nachdem man den Namen eingibt (bz auf ineluki's code), geht man aus dem Programm.
Kann das an meinem Compiler liegen? Ich habe Dev-C++ Version 5...
Nachdem man den Namen eingibt (bz auf ineluki's code), geht man aus dem Programm.
Kann das an meinem Compiler liegen? Ich habe Dev-C++ Version 5...
...
Liegt wohl daran, dass sich das Programm sofort nach der Ausgabe des Namen beendet, denke ich. Ynnus hat ja ein
eingebaut, um zu verhindern, dass sich das Programm sofort beendet. Alternativ könntest du das unter (Win)Do(w)s auch mit dem Befehl 'Pause' regeln:
Oder mit dem Include <conio.h> könntest du auch folgendes schreiben:
Gibt eigentlich unzählig viele Möglichkeiten, um das Programm am Beenden zu hindern. Ich nutze meistens getch().
Öhm, achso: Oder man startet das Programm über die Konsole. Dann bleibt der ausgegebene Text auch lesbar.
Vielen Dank. Ich probier gleich mal die Möglichkeiten aus.
Falls es (nicht) klappt, meld ich mich und Bedanke mich (nicht)^^ Edit :
Alles klar, es funzt. Hab den Fahler alleine gefunden. Bei Inelukis Code ganz unten ist
kein Befahl eingegeben, der das Programm am sofortigen Beenden aufhalten könnte.
Ich hab das Tut noch ein bisschen erweiter, nur so zu rumprobieren:
cout<<"Zum Beenden 'Beenden' eingeben und Enter druecken!\n";
...
Du weißt aber schon, dass "Beenden" in deinem Code der Name der Variablen ist und nicht das, was getippt werden muss, zum beenden, oder?
Und solche Sachen wie 3 mal "\n" in eigene Cout's kann man auch in eine Reihe schreiben:
oder geht auch so:
hast recht, sry^^
aber das mit dem beenden funzt.
is ja so eingecodet, dass die variable beenden heißt und man beenden darin eintippen kann. wenn die variable beenden=beenden ist, wird das prog beendet. ich könnte
die vari nturlich auch 23~ffg3sfd4 nennen, aber beenden is halt übersichtiger^^
In eine Char-Variable kannst du nur einen Wert in Byte-Größe eingeben, da char signed (mit Vorzeichen) ist, von -128 bis 127. Das bedeutet, es ist nur ein Buchstabe (in ASCII Form 8 Bit) möglich. Demnach kannst du eben nicht "Beenden" eintippen und in der Variable Beenden speichern. Wenn man mehr als einen Buchstaben eintippt beendet sich das Programm ab dieser Zeile, da nur ein Buchstabe erwartet wird.
Ausserdem ist das KEIN Fehler ...
Normalerweise startet man Consolenprogramme auch von der Console aus, oder ?
Wenn man so ein Tastendrueckgedoens drin hat, und das Programm wirklich mal von der Console startet denkt man wiederum, das Programm ist abgestuerzt, weil es nichts mehr macht. Wenn du sowas schon einbaust, solltest du wenigstens "Zum Beenden Enter druecken." reinschreiben ...