<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Möglchst einfach von Konsole einlesen]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Mein Problem: ich kann zwar die gestellte Aufgabe lösen, aber - da ich C++ noch nicht so gut kenne - kenne ich offenbar die Funktion nicht, die Testdaten einzulesen.</p>
<p>Diese sollen von cin gelesen werden und sehen z.B. so aus:</p>
<pre><code>3
1 3 2 1
1 2 22 1
19 38 1 -2
</code></pre>
<p>D.h. in der ersten Zeile steht, wie viele Zeilen folgen werden, anschliessend folgen jeweils 4 mit Leerschlag getrennte Zahlen pro Zeile, die vorzugsweise in ein Array oder so gespeichert werden.</p>
<p>Wie mache ich das am besten? Gibt es eine solche Funktion (Split, oder was ähliches wie sprintf zum lesen)?</p>
<p>Vielen Dank für eure Hilfe.</p>
<p>Ich wünsche ausdrücklich keine Komplettlösung, sondern wie ich das am effizientesten mache (da ich das das ganze Semester wohl noch einige Male machen werde.... :))</p>
<p>Viele Grüsse</p>
<p>Lukas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300079/möglchst-einfach-von-konsole-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 23:45:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300079.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Feb 2012 18:55:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 18:55:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Mein Problem: ich kann zwar die gestellte Aufgabe lösen, aber - da ich C++ noch nicht so gut kenne - kenne ich offenbar die Funktion nicht, die Testdaten einzulesen.</p>
<p>Diese sollen von cin gelesen werden und sehen z.B. so aus:</p>
<pre><code>3
1 3 2 1
1 2 22 1
19 38 1 -2
</code></pre>
<p>D.h. in der ersten Zeile steht, wie viele Zeilen folgen werden, anschliessend folgen jeweils 4 mit Leerschlag getrennte Zahlen pro Zeile, die vorzugsweise in ein Array oder so gespeichert werden.</p>
<p>Wie mache ich das am besten? Gibt es eine solche Funktion (Split, oder was ähliches wie sprintf zum lesen)?</p>
<p>Vielen Dank für eure Hilfe.</p>
<p>Ich wünsche ausdrücklich keine Komplettlösung, sondern wie ich das am effizientesten mache (da ich das das ganze Semester wohl noch einige Male machen werde.... :))</p>
<p>Viele Grüsse</p>
<p>Lukas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185352</guid><dc:creator><![CDATA[LukasM]]></dc:creator><pubDate>Fri, 24 Feb 2012 18:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 19:04:32 GMT]]></title><description><![CDATA[<p>Nein. Sehr einfach mit std::cin:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

int main()
{
    std::vector&lt;int&gt; zahlen(16);
    for(int a(0);a &lt; 16;++a)
        std::cin &gt;&gt; zahlen.at(a);
}
</code></pre>
<p>Liest <strong>genau</strong> 16 Zahlen ein (4 * 4). Kannst aber auch in einer Zeile 3 und in der anderen 5 stehen haben oder 15 in eine und 1 in die andere. Macht keinen Unterschied. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: Tut mir Leid, Komplett-Lösung. Soll ich es dir erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185355</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 24 Feb 2012 19:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 19:04:36 GMT]]></title><description><![CDATA[<p>-Was willst du mit den Zahlen machen? Willst du damit rechnen?<br />
-cin ist im Allgemeinen an die Tastatur gekoppelt. Stehen die Daten in einer Datei? Dann musst du ein ifstream-Objekt nehmen, und nicht cin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185357</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 24 Feb 2012 19:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 19:21:16 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>-cin ist im Allgemeinen an die Tastatur gekoppelt.</p>
</blockquote>
<p>cin ist im Allgemeinen an die Standardeingabe gekoppelt. Das kann alles mögliche sein. Umleitung der Standardeingabe ist das 1x1 des Workflows auf der Konsole.</p>
<p>@Threadersteller:<br />
1. Ist das Format so vorgegeben oder hast du dir das selber als besonders leicht einlesbar ausgedacht? Denn das ist es nicht. Wenn du die führende 3 weglassen wurdest, wäre alles viel einfacher, sowohl für den Leser der Daten und ganz besonders für den Ersteller, der dann einfach Zeilen einfügen kann, ohne sich Sorgen zu machen, an einer völlig anderen Stelle etwas ändern zu müssen.<br />
2. Ist das alles was eingegeben wird, oder kommt danach noch was?<br />
3. Soll auf Fehler geprüft werden, so dass zum Beispiel nicht 3 Zahlen in einer Zeile stehen und in der nächsten 5? Oder reicht es dir, einfach Zahlen in Viererpaketen einzulesen, egal wie sie genau formatiert sind?<br />
4. Du wirst sicherlich eine Klasse oder Struct für die Daten haben. Die übliche Vorgehensweise wäre, den Operator&gt;&gt;(istream &amp;, DeineKlasse&amp;) zu überladen. Das klingt kompliziert, ist aber ganz einfach. Wenn du diese Fragen beantwortest, kann ich oder jemand anderes dir dies konkret an deinem Fall zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185364</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Feb 2012 19:21:16 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 19:24:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ach so, vector-Klasse habe ich noch nicht gekannt, wenn man das denkt ist es dann gar nicht mehr so schwer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>@Gugelmoser: Was ich mit den Zahlen machen will? Naja, ist ein Algorithmus, aber den hab ich schon, und ja ich denke, ich muss cin verwenden, das ganze muss ich online einreichen und wird mit Testeingaben online ausgewertet, und das funktioniert mit stdin und stdout, steht zumindest auf der Vorlesungsseite <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: 1. Nein, ist es nicht, das ist genau so vorgegeben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
2. Das ist alles das eingegeben wird<br />
3. Sehe ich dann, ob das so geht.<br />
4. Nein, das ist alles was ich dazu habe, es ghet nicht um Programmieren in der Vorlesung, sondern um Algorithmen und Datenstrukturen.</p>
<p>Vielen Dank euch. Sollte so klappen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185365</guid><dc:creator><![CDATA[LukasM]]></dc:creator><pubDate>Fri, 24 Feb 2012 19:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 20:00:07 GMT]]></title><description><![CDATA[<p>LukasM schrieb:</p>
<blockquote>
<p>4. Nein, das ist alles was ich dazu habe, es ghet nicht um Programmieren in der Vorlesung, sondern um Algorithmen und <strong>Datenstrukturen</strong>.</p>
</blockquote>
<p>Nun, da hatte ich das doch <strong>gerade</strong> erwartet, dass die Daten in irgendeiner Struktur landen, wenn sie strukturiert eingelesen werden.</p>
<p>Wie auch immer, eigentlich würde man eine unbekannte Anzahl von Integern zum Beispiel so einlesen:</p>
<pre><code class="language-cpp">vector &lt;int&gt; zahlen;
{             // Scope auf, weil die Variable zahl nur temporär ist
 int zahl;
 while (cin &gt;&gt; zahl)  // Solange Lesevorgang gut ging...
  zahlen.push_back(zahl);   // ...den gelesenen Wert abspeichern
}             // Lesen fertig, Scope zu, zahl tot
</code></pre>
<p>Mit der Vorgabe des etwas unglücklichen Formats wird das etwas komplizierter ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ungetestet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ):</p>
<pre><code class="language-cpp">vector &lt;int&gt; werte;
{
 int anzahl_zeilen;
 cin &gt;&gt; anzahl_zeilen;
 string zeile;
 int zeilenzaehler;
 for (zeilenzaehler = 0; 
      zeilenzaehler &lt; anzahl_zeilen and getline(cin, zeile);  // Wenn noch eine Zeile zu lesen ist, so wird diese gelesen. Falls das Lesen scheitert, bricht die Schleife ab
      ++zeilezaehler
     )
  {
    // Lesen erfolgreich, verarbeite Zeile. Packe sie dazu in einen Stream:
    stringstream zeilenparser(zeile);
    // Und lese diesen aus:
    int spaltenzaehler;
    int wert;
    for (spaltenzaehler = 0; 
         spaltenzaehler &lt; 4 and zeilenparser &gt;&gt; wert;
         ++spaltenzaehler;
        )
     werte.push_back(wert);

    // Werte der Zeile gelesen. Waren es auch wirklich 4? Und kommt im Rest der Zeile auch nichts anderes mehr?
    char testchar;
    if (zeilenzahler != 4 or zeilenparser &gt;&gt; testchar)
     throw runtime_error(&quot;Anzahl der Spalten stimmt nicht!&quot;);
  }
 // Zeilen gelesen.  Waren es auch wirklich anzahl_zeilen? Und kommt im Rest der Eingabe auch nichts anderes mehr?
 char testchar;
 if (zeilenzahler != anzahl_zeilen or cin &gt;&gt; testchar)
  throw runtime_error(&quot;Anzahl der Zeilen stimmt nicht!&quot;);
}  // Scope zu, das Ende der temporären Variablen
// An dieser Stelle sollten anzahl_zeilen mal 4 Werte in werte stehen.
</code></pre>
<p>Du siehst, das kann ganz schön umständlich werden. Wenn man es ein bisschen schöner machen möchte, kann man auch diese Logik in die Einleseroutinen selbst auslagern. Ein erster Schritt dazu, wäre die Operatorüberladung, aber dazu sollte man erst einmal eine sinnvolle Datenstruktur definieren. Dann überlädt man den Operator für diese Struktur. Die Definition der Operatorfunktion sähe dann ungefähr so aus wie der gezeigte Code, man würde dann eben nicht in <code>werte</code> schreiben, sondern in die Struktur. Dann sähe das Einlesen im Hauptprogramm auch wieder so ähnlich aus, wie mein erstes Beispiel. Ein zweiter Schritt wäre, das Verhalten des Streams an sich zu ändern, so dass dieser die Trennung der Werte so vornimmt, wie es dem vorgegebenen Format entgegenkommt. Dann wäre auch das Einlesen nicht mehr so umständlich mit dem Zwischenschritt über den Stringstream. Das ist dann aber wirklich kein Anfängerthema mehr, das erkläre ich jetzt mal nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185370</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 24 Feb 2012 20:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Möglchst einfach von Konsole einlesen on Fri, 24 Feb 2012 21:20:13 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Naja, so weit sind wir noch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /> Wie gesagt es ist unsere erste derartige Vorlesungen und es geht eigentlich nur drum, einen Algorithmus (gegeben als Rekursionsgleichung) möglichst effizient zu programmieren und eine gewisse Laufzeit einzuhalten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Die Version von Hacker hat so auf jeden Fall super geklappt und genügt wohl vollends, weil dies nicht das Einlesen nicht die eigentliche Problemstellung ist (zumindest nicht im Moment). Zumindest hat das Hard-Testset keine Fehler ausgegeben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Nochmals danke für eure Hilfe!</p>
<p>Viele Grüsse</p>
<p>Lukas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2185408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2185408</guid><dc:creator><![CDATA[LukasM]]></dc:creator><pubDate>Fri, 24 Feb 2012 21:20:13 GMT</pubDate></item></channel></rss>