Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen
-
@DocShoe:dachte wirklich,dass es durch <iostream>inkludiert wird.
@manni66:ich nutze Xcode,das Fenster schliesst nicht
@Th69:ich weiß,dass die Ausgabe "Nico33\n" genau so als Zeichenfolge ausgegeben wird.
Was heißt genau"das Programm erfragt die Eingabe (standardmäßig) über die Tastatur"?
Leerzeichen wegen whitespace,heißt damit die Ausgabe nicht komplett gelesen wird?Das heißt ich kann das Programm Xcode nicht als Speicherort nutzen (Eingabe)um es schließlich auszulesen und somit auszugeben?
Die Funktionsweise mittels Pipe bzw. den Zusammenhang und Nutzung verstehe ich nicht ganz?
-
K.A., wie ich es dir anders erklären soll.
Deine Ausgabe "Nico33\n" ist komplett sinnfrei. Es würde auch genauso funktionieren, wenn du es auskommentierst (so wie ich es bei dem Online-Compiler Code gemacht habe - hast du dir diesen mal angeschaut?).
Ich kann mir auch nicht vorstellen, daß in dem Buch von Stroustrup dies nicht auch genau erklärt wird, also wie die Standardein- und -ausgabe funktioniert.Das Programm erwartet eine Eingabe (von der Tastatur) und mittels
std::cin >> first_name
wird ein String (Text) eingelesen, solange bis ein Whitespace (Leerzeichen, Tab, Zeilenumbruch etc.) kommt. Anschließend wird mitstd::cin >> age
versucht, noch eine Zahl einzulesen.
Und ohne das Leerzeichen würde "Nico33" alsfirst_name
komplett eingelesen und dann beiage
stehenbleiben (solange bis eine weitere Eingabe getätigt wird).Vllt. verstehst du es so besser:
std::string first_name; int age; std::cout << "Bitte gib deinen Namen ein:\n"; std::cin >> first_name; std::cout << "Und jetzt dein Alter:\n"); std::cin >> age; std::cout << "Hallo " << first_name << " (Alter" << age << ")\n";
-
std::cout (Standard character output stream) und std::cin (standard character input stream) sind voneinander 100% unabhängig.
Wenn du in der Konsole Zeichen eingibst, werden diese erstmal gepuffert, sodass Du z. B. noch Korrekturen machen kannst, bevor Du dann mit der Eingabe/Return Taste die eingegebenen Zeichen "abschickst". Dann landen die Zeichen in std::cin, und können von dort z. B. mit operator>> gelesen werden. Das Programm wartet bei einer Eingabe mit cin so lange, bis Du Zeichen eingibst, die gelesen werden können.
Wenn du mit std::cout etwas ausgibst, landen die Zeichen zwar in der Konsole, aber sie sind nicht im Eingabe-Stream std::cin.
Wenn du mit operator>> aus std::cin etwas ließt, dann werden standardmäßig nur Zeichen bis zum nächsten Whitespace (z. B: Leerzeichen, Tab oder Newline) betrachtet. Ein Beispiel:
string vorname; string nachname; std::cin >> vorname >> nachname; // Auf der Tastatur wird eingegeben "Max Mueller" und dann Return gedrückt std::cout << "Hallo " << vorname << ' ' << nachname << '\n'; // Ausgabe: "Hallo Max Mueller"
Dein Programm gibt einfach "Nico33" aus, und wartet dann in der Zeile
std::cin >> first_name;
darauf, dass Du etwas in der Konsole eingibst.
-
@it851 sagte in Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen:
Das heißt ich kann das Programm Xcode nicht als Speicherort nutzen (Eingabe)um es schließlich auszulesen und somit auszugeben?
Du redest vollkommen wirr.
-
@Th69 ja habe es mir angeschaut und mich gewundert oder wunder mich immernoch warum im online compiler ,Hallo Nico (Alter33) ausgegeben wird und bei mir in xcode nicht.
Tut mir leid Leute ich beschäftige mich seit kurzem damit und verstehe vielleicht die einfachsten Dinge nicht.Im Buch wird es erklärt.Das Buch ist aber auch so aufgebaut,dass man selber nachdenken bzw andere bei Schwierigkeiten fragen muss.Daher bin ich hier und werde euch eine Weile erhalten bleibenIch sitze jetzt 2 Stunden an euren Beiträgen und werde nur teilweise schlau draus.Kann mir einer diesen Code so schreiben wie ich es auch bei xcode eingeben muss,damit Hallo Nico (Alter33) ausgegeben wird.Glaube dann habe ich ein besseres Verständnis.
#include <iostream>
#include <string>int main ()
{std::cout << "Nico 33\n";
std::string first_name;
int age;
std::cin >> first_name;
std::cin >> age;
std::cout << "Hallo" << first_name << "(Alter" << age << ")\n";}
Dies hier habe ich gegoogelt aber auch nicht verstanden:
"Wenn du die Eingabe von außen deinem Programm mitteilen möchtest, dann geht das mittels Pipe bzw. Pipes and Redirection."@hustbaer ja mein Kopf qualmt sicherlich deswegen
-
also als Zusatz
Ziel dieser Übung soll sein,eine variable mit typ als speicher zu nutzen um es danach auszugeben,heißt Name und Alter speichern,einlesen und ausgeben
-
Kannst du nicht irgendeine "echte" Person fragen, die mal schnell auf deinem Computer gucken kann? Ich habe keine Ahnung, wie ich dir hier noch helfen könnte. Mir scheint, dir fehlt irgendeine so offensichtliche Information, dass sich hier niemand vorstellen kann, warum du nicht weiterkommst.
Ach ja:
@IT851 sagte in Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen:Das Buch ist aber auch so aufgebaut,dass man selber nachdenken (...) muss
Ach was!
-
nein kann ich nicht,sonst wäre ich nicht hier,
nachdenken indem Sinne,das man nicht alles detailliert vorgeschrieben bekommt und selbst recherchieren und versuchen muss,auch auch Grund warum ich hier bin.
dein Beitrag hättest du dir auch sparen können,bitte nur hilfreiche posts
-
OK, dann frage ich mal andersherum: Warum gibst du
"Nico 33\n"
aus?
-
@IT851 sagte in Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen:
dein Beitrag hättest du dir auch sparen können,bitte nur hilfreiche posts
Den Beitrag hättest du dir auch besser gespart...
-
ja stimmt die Ausgabe ist sinnfrei
#include <iostream>
#include <string>int main()
{
std::string first_name = "Nico"; // speichere Wert "Nico" in der Variable int age = 33; //speichere Wert 33 in der Variable std::cin >> first_name; //lese first_name ein std::cin >> age; //lese age ein std::cout << "Hallo" << first_name << "(Alter" << age << ")\n"; // gebe schließlich "Hallo",first name,Alter und age aus
return 0;
}
// Hallo Nico (Alter33) soll ausgegeben werden
so habe ich es jetzt überarbeitet,aber xcode gibt mir jetzt garnix aus
-
Wenn das Programm gestartet ist, dann solltest du den Eingabecursor blinken sehen. Dort gibt du dann "Nico 33" ein und drückst die Enter/Return-Taste.
Dann sollte die Ausgabe "Hallo Nico (Alter33)" erscheinen.Wenn du das jetzt auch noch nicht verstanden hast, dann solltest du überlegen, ob ein Informatik-Studium wirklich etwas für dich ist (auch wenn Informatik nicht nur [oder überhaupt] Programmierung bedeutet).
PS: In deinem Code fehlen die Unterstriche zwischen
first
undname
:first_name
.
-
Unterstriche habe ich alle drin,das Programm zeigt an wenn etwas wie ein Unterstrich fehlt.
Das Programm startet,es wird aber nix angezeigt bzw ausgegeben.Doch ich werde Informatik studieren und abschließen,und bis dahin auch C++ einigermaßen beherrschen.Davon bin ich überzeugt.
-
Du sollst ja auch selber etwas über die Tastatur eingeben!!!
-
Wo liegt denn nun das Problem? Das Programm tut genau dies, wie es geschrieben wurde.
#include <iostream> #include <string> int main() { std::string first_name = "Nico"; // speichere Wert "Nico" in der Variable int age = 33; //speichere Wert 33 in der Variable std::cin >> first_name; //lese first_name ein std::cin >> age; //lese age ein std::cout << "Hallo" << first_name << "(Alter" << age << ")\n"; // gebe schließlich "Hallo",first name,Alter und age aus return 0; }
hoihoi //Name Nico wird hier wie gewünscht überschrieben, 42 //ebenso wie das Alter Hallohoihoi(Alter42) Process returned 0 (0x0) execution time : 9.781 s Press any key to continue.
-
Sorry wegen den Unterstrichen: dies liegt wohl hier am Forum (s. mein Beitrag in Dünne Linien in Codeboxen in Firefox).
-
@lemon03 sagte in Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen:
Wo liegt denn nun das Problem?
Wenn Du nur die definierten Variablen ausgeben willst, lasse die Eingaben weg.
#include <iostream> #include <string> int main() { std::string first_name = "Nico"; // speichere Wert "Nico" in der Variable int age = 33; //speichere Wert 33 in der Variable //std::cin >> first_name; //lese first_name ein //std::cin >> age; //lese age ein std::cout << "Hallo" << first_name << "(Alter" << age << ")\n"; // gebe schließlich "Hallo",first name,Alter und age aus return 0; }
HalloNico(Alter33) Process returned 0 (0x0) execution time : 0.281 s Press any key to continue.
-
Es lag tatsächlich an xcode,habe es über ein online compiler laufen lassen und es hat funktioniert,kriege die Ausgabe ,HalloNico(Alter33)
@Th69 kein Ding,ja liegt am Forum und dem Informatik Studium steht zum Glück doch nix im Weg
Danke an alle!
-
@lemon03
durch das weglassen der Eingaben hat es auch über Xcode funktioniert.
Aber wieso ist das so?Online funktioniert es auch mit Eingaben
-
@IT851 Was heißt Weglassen der Eingaben? Was heißt funktionieren?
Wenn Du mit der IDE Probleme hast, dann schreib doch einfach deine main.cpp in einem Text-Editor, dann in einer Konsole (Terminal) in das Verzeichnis navigieren (mit cd und evtl. ls) und dann
g++ main.cpp -o main ./main
Kompilieren + Aufrufen, fertig. Reicht für alle Programme < 200 Zeilen locker.
Wenn Du z.B. noch mehr Unterstützung durch den Compiler möchtest, oder die aktuellsten C++ features ausprobieren willst (eckige Klammern == optional, | == oder):
g++ -Wall -Wextra [-std=c++11 | -std=c++14 | -std=c++17] main.cpp [-lstdc++fs] -o main
Das
-lstdc++fs
brauchst Du momentan nur, wenn Du std::filesystem verwenden möchtest (wahrsch. kommt das am Anfang nicht vor, aber durchaus nach ein paar Monaten).Wenn man versteht, wie Compiler, Linker und co. zusammenarbeiten, dann machen auch die vielen Einstellung in der IDE mehr Sinn und man kann nachvollziehen, was dort gemacht wird.
Sobald mehr als eine einzige Quelldatei verwendet werden soll, würde ich CMake empfehlen. Dann kannst Du einfach ein bash script schreiben, dass in einem Aufruf das komplette Projekt kompiliert etc. Ist sehr angenehm.