EINLESEN C++
-
Kann man das nicht irgendwie schöner darstellen?
-
#include <array> #include <iostream> int main() { std::array<int, 10> ar; for (auto &it : ar) { std::cout << "Geben sie einen wert ein:"; std::cin >> it; } std::cout << "Ihre Werte:\n"; for (auto &it : ar) { std::cout << it << "\n"; } }Eher so?
-
Ja sieht schön aus aber man muss es ja auch verstehen . Was bewirkt denn dieses Std ?
-
Ja sieht schön aus aber man muss es ja auch verstehen . Was bewirkt denn dieses Std ?
Welches Buch liest du? Eins von Jürgen Wolf?
std+ Scope-Operator (::) bedeutet, dass ich auf einen Namen (konkret in diesem Fall auf die Instanz einer Klasse [cout/cin] bzw. auf einen Klassennamen [array]), der im Namensraum/Namespacestdliegt.
-
Java21 schrieb:
Ja sieht schön aus aber man muss es ja auch verstehen . Was bewirkt denn dieses Std ?
Hol dir besser ein Grundlagenbuch, sonst bringt das hier alles nichts.
Dazu nutzt Tobis Lösung C++11-Features (std::array, range-basedfor), die wirst du mit so wenig Vorwissen nicht so ohne weiteres Verstehen.Oder wenn du einfach eine Antwort haben willst:
N3337 17.6.2 / 1All library entities except macros, operator new and operator delete are defined within the namespace
std or namespaces nested within namespace std.
-
PS: Manche Leute bevorzugen es, den Namespace
stdglobal auszuschütten àlausing namespace std;Ist aber manchmal hinderlich, da es zu Namenskonflikten kommen könnte.
(Nur so als Info, weil viele Bücher am Anfang damit arbeiten)
-
Nunja, Antworts Lösung erfordert mehrere Zahlen, die mit Leerzeichen getrennt eingegeben werden. Tobis Lösung erfordert nach jedem Eintrag ein Enter, da kann man sich fragen, was man "schöner" findet. Die Schönheit hängt eben davon ab, was man überhaupt erreichen möchte und wie man diese Daten erwartet.
Normalerweise weiß ein Benutzer z.B. gar nicht, was er jetzt eingeben soll. Dann ist es schon schlau, wenn für jeden Wert angegeben wird, was etwas bedeutet.
Ist das jedoch klar, so sind viele mit Leerzeichen getrennt angegebene Werte durchaus zielführend.
Und ansonsten sollte der Benutzer vielleicht überhaupt nichts explizit angeben müssen und ein Einlesen aus einer Datei ist die beste Lösung.
-
Eisflamme schrieb:
Tobis Lösung erfordert nach jedem Eintrag ein Enter, (...)
Nein, tut sie nicht.
-
Nein, tut sie nicht.
Man könnte die Werte auch durch Leerzeichen getrennt auf eine Zeile schreiben, dann würde sie sich
couthalt nacheinander aus dem Puffer holen. Aber das ist doch ehrlich gesagt Haarspalterei.
Exakterweise fordert meine Lösung nach jedem Wert ein Whitespace.Hatte einfach keine Lust,
getlinezu benutzen, war ja auch nur so schnell hingeschrieben.Dazu nutzt Tobis Lösung C++11-Features (std::array, range-based for), die wirst du mit so wenig Vorwissen nicht so ohne weiteres Verstehen.
Ach ja stimmt, fällt mir inzwischen gar nicht mehr auf.
-
oh, sorry
-
Sone schrieb:
Dazu nutzt Tobis Lösung C++11-Features (
std::array, range-basedfor), die wirst du mit so wenig Vorwissen nicht so ohne weiteres Verstehen.Nur weil "unsereiner" die C++11 features im Vergleich zu den C++03 Features als neu und noch ungewohnt empfindet heißt das nicht, dass ein C++-Neuling die Sachen komplizierter finden muss als den Rest. Im Grunde ist vom Konzept her range-based-for leichter zu verstehen als das altbekannte Iterator-Gehoppel.
-
Nur weil "unsereiner" die C++11 features im Vergleich zu den C++03 Features als neu und noch ungewohnt empfindet heißt das nicht, dass ein C++-Neuling die Sachen komplizierter finden muss als den Rest.
Es ging nicht darum, ob ein Neuling sie schwerer oder leichter findet, sondern darum, ob er sie ohne Vorwissen versteht. Ich würde - hätte ich mein C++11 Buch nicht gelesen - Sachen wie Range-Based-for oder Initializer-Lists auch nicht verstehen, und davon, dass jedes Anfängerbuch auf C++11 eingeht sind wir noch Lichtjahre entfernt.
#include <tr1/array> #include <iostream> int main() { using std::tr1::array; array<int, 10> ar; for (unsigned i(0); i<ar.size(); ++i) { std::cout << "Geben sie einen wert ein:"; std::cin >> ar[i]; } std::cout << "Ihre Werte:\n"; for (unsigned i(0); i<ar.size(); ++i) { std::cout << ar[i] << "\n"; } }So, hier nochmal für all die krümelkacker, die nichts von C++11 halten. Benutze aber trotzdem die Features des TR1.