<?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[TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++]]></title><description><![CDATA[<p>Servus,</p>
<p>Ich will einen mehrzeiligen Text eingeben.<br />
Das Abbruchktriterium soll eine leere Zeile sein.<br />
Beim kompilieren kommt keine Fehlermeldung.<br />
Beim Ausführen jedoch kommt nach dem ersten enter eine Windows Fehlermeldung!!</p>
<p>Kann mir jemand weiterhelfen ? Wäre sehr nett...</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>void EINGABE (char[]);</p>
<p>int main ()<br />
{<br />
char *INPUT ;<br />
cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;</p>
<p>EINGABE(INPUT);</p>
<p>cout &lt;&lt;endl&lt;&lt;endl;<br />
system (&quot;pause&quot;);<br />
return 0;<br />
}</p>
<p>void EINGABE (char INPUT[])<br />
{<br />
do<br />
{<br />
cin.getline (INPUT,1000);<br />
char* p = new char[ strlen(INPUT) +1 ];</p>
<p>if (p==NULL)<br />
{cerr &lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;------Speicherreservierung M I S S L U N G E N------&quot;;}</p>
<p>strcpy (p,INPUT);<br />
p++;<br />
} while (strlen(INPUT)!= 0);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199651/text-eingabe-in-einer-schleife-in-c-c</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:18:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199651.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Dec 2007 17:28:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 17:28:58 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>Ich will einen mehrzeiligen Text eingeben.<br />
Das Abbruchktriterium soll eine leere Zeile sein.<br />
Beim kompilieren kommt keine Fehlermeldung.<br />
Beim Ausführen jedoch kommt nach dem ersten enter eine Windows Fehlermeldung!!</p>
<p>Kann mir jemand weiterhelfen ? Wäre sehr nett...</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>void EINGABE (char[]);</p>
<p>int main ()<br />
{<br />
char *INPUT ;<br />
cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;</p>
<p>EINGABE(INPUT);</p>
<p>cout &lt;&lt;endl&lt;&lt;endl;<br />
system (&quot;pause&quot;);<br />
return 0;<br />
}</p>
<p>void EINGABE (char INPUT[])<br />
{<br />
do<br />
{<br />
cin.getline (INPUT,1000);<br />
char* p = new char[ strlen(INPUT) +1 ];</p>
<p>if (p==NULL)<br />
{cerr &lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;------Speicherreservierung M I S S L U N G E N------&quot;;}</p>
<p>strcpy (p,INPUT);<br />
p++;<br />
} while (strlen(INPUT)!= 0);<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415415</guid><dc:creator><![CDATA[AJAF]]></dc:creator><pubDate>Wed, 05 Dec 2007 17:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 17:54:45 GMT]]></title><description><![CDATA[<p>ich würde halt VOR der eingabe deinen Speicher mal dimensionieren... (Input) Dann würde halte ich es noch für eingartig das du bei der Funtionsdeklaration was anderes angegeben hast wie unten.</p>
<p>Naja so direkt sehe ich jetzt auch nicht was du mit dem Code bezwecken willst, meiner meinung nach ist das was jetzt da steht eh nicht lauffähig..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415429</guid><dc:creator><![CDATA[prograwas??]]></dc:creator><pubDate>Wed, 05 Dec 2007 17:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 17:56:03 GMT]]></title><description><![CDATA[<p>Zwei Sachen: Du kannst nicht getline auf deine Variable &quot;INPUT&quot; anwenden, weil sie nicht initialisiert ist. Die Variable ist ein Zeiger auf chars, weil du ihn nicht belegt hast, ist es aber ein verwirrter Zeiger, deshalb gibts den Fehler! Du solltest dem Zeiger einen Platz geben (wo genug Platz für den String ist), wo er hinzeigen kann, am besten mit &quot;new&quot;. Und, um verwirrte Zeiger zu vermeiden, sollte man Zeiger immer zuerst auf die Speicherstelle 0 zeigen lassen, damit kann man leicht prüfen ob sie (n)irgendwohin zeigen und der verwirrte Zeiger kann nicht versehentlich irgendwas wichtiges Überschreiben.<br />
Also: Mit NULL initialisieren (char* INPUT=NULL;) oder ihn gleich auf gültigen Speicherplatz zeigen lassen (char* INPUT=new char[100];).</p>
<p>Zweitens: &quot;new&quot; gibt nie NULL zurück, sondern wirft eine Ausnahme, wenn kein Speicherplatz mehr da ist <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1415431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415431</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 05 Dec 2007 17:56:03 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 18:00:21 GMT]]></title><description><![CDATA[<p>INPUT = new char[1000];</p>
<p>vor deinem´:<br />
cin.getline (INPUT,1000);</p>
<p>löst das Fehler, dein Input war nich Dimensioniert, kann also keine Daten zum kopieren aufnehmen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415434</guid><dc:creator><![CDATA[prograwas??]]></dc:creator><pubDate>Wed, 05 Dec 2007 18:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 18:14:03 GMT]]></title><description><![CDATA[<p>prograwas?? schrieb:</p>
<blockquote>
<p>INPUT = new char[1000];</p>
<p>vor deinem´:<br />
cin.getline (INPUT,1000);</p>
<p>löst das Fehler, dein Input war nich Dimensioniert, kann also keine Daten zum kopieren aufnehmen..</p>
</blockquote>
<p>Ist aber auch nur eine halbe Lösung, der Zeiger in main kriegt von der Zuweisung nämlich nix mit; wenn dann muss das in der main passieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415440</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 05 Dec 2007 18:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Wed, 05 Dec 2007 23:35:46 GMT]]></title><description><![CDATA[<p>Hi, schon mal danke für die nette Hilfe!</p>
<p>Nur als Aufklärung was ich mit meinem Programm will!!<br />
________________________________________</p>
<ol>
<li>cin.getline (INPUT,1000);</li>
</ol>
<p>Also als erstes will ich eine Zeile (vom Typ char)eingeben können die max. 1000 Zeichen besitzt.<br />
______________________________________________<br />
2) char* p = new char[ strlen(INPUT) +1 ];</p>
<p>Danach soll diese Zeile soviel Speicherplatz bekommen wie sie auch nur wirklich benötigt. Des +1 ist für das Zeichen \0.<br />
Jedoch soll auf diese Zeile jetzt nicht mehr der INPUT zeigen, sondern der neue Zeiger p.</p>
<p>Danke Jungs jetzt funktioniert es ohne Fehler!!!!</p>
<p>int main ()<br />
{<br />
char INPUT[1000] ; &lt;&lt;&lt;&lt;&lt;&lt;&lt;Hier war der Fehler, mit Speicherplatzreservierung funktionierts</p>
<p>cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;</p>
<p>EINGABE(INPUT);</p>
<p>Danke für die schnelle und kompetente Hilfe !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415561</guid><dc:creator><![CDATA[AJAJ]]></dc:creator><pubDate>Wed, 05 Dec 2007 23:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Thu, 06 Dec 2007 08:46:23 GMT]]></title><description><![CDATA[<p>AJAJ schrieb:</p>
<blockquote>
<p>...<br />
char INPUT[1000] ; &lt;&lt;&lt;&lt;&lt;&lt;&lt;Hier war der Fehler, mit Speicherplatzreservierung funktionierts<br />
...</p>
</blockquote>
<p>... aber auch nur solange nicht mehr als 1000 Zeichen eingegeben werden (spätestens, wenn Du Dateien einlesen lässt, ist das gar nicht mehr so viel, wie es jetzt scheint).</p>
<p>Warum machst Du es nicht einfach mit C++ ? ... und C++ hat ja schließlich string ! <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>
<pre><code class="language-cpp">#include &lt;string&gt;
using std::string;

void EINGABE (string&amp;);

int main () {
   string INPUT ;
   cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;

   EINGABE(INPUT);

   cout &lt;&lt;endl&lt;&lt;endl;
   system (&quot;pause&quot;);
   return 0;
}

void EINGABE (string&amp; INPUT) {
   string einzelInput;
   do  {
      getline(cin, einzelInput); // OHNE &quot;cin.&quot; davor !!
      INPUT += einzelInput; 
      // oder falls Du das abschließende \n nicht dabei haben willst:
      // INPUT += einzelInput.substr(0, einzelInput.length()-1);
   } while (einzelInput.length());
}
</code></pre>
<p>Dieses ganze char-Geraffel macht doch keinen glücklich und sieht auch noch blöd aus....<br />
So hast Du noch Alternativen wie z.B.:</p>
<pre><code class="language-cpp">void EINGABE(string&amp; INPUT) {
   string einzelInput;
   do  {
      cin &gt;&gt; einzelInput;
      if(einzelInput != &quot;-&quot;) INPUT += einzelInput;
   } while (einzelInput != &quot;-&quot;);
}
</code></pre>
<p>oder (mein persönlicher Favorit):</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

void EINGABE(vector&lt;string&gt;&amp; INPUT) {
 std::copy(
         std::istream_iterator&lt;string&gt;(cin),
         std::istream_iterator&lt;string&gt;(),
         std::back_inserter(INPUT));
}
</code></pre>
<p>(hier wird auch klar, warum eine separate Eingabe-Funktion überflüssig sein kann)</p>
<p>Letzteres weist Dich auf die logisch folgende Frage hin: Sollen <em>wirklich</em> alle Eingaben in demselben string bearbeitet werden ... oder ist es bei Dir nicht auch so wie bei 99,9% aller Anderen:<br />
Du möchtest schon die einzelnen Eingaben getrennt arbeiten, hältst es aber erstmal für einfacher, alles erst in einen String zu packen und hinterher wieder auseinander zu puhlen. <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="😉"
    /><br />
Dann nimm doch lieber gleich wieder den vector&lt;string&gt; - da hast Du alles, was Du brauchst...</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Deine Bezeichner sind ein wenig ungewöhnlich... so komplett Großgeschriebenes wird üblicherweise höchstens für Konstanten verwendet (und selbst da immer weniger) - macht den Code natürlich nicht falsch, aber hakt eben ein wenig beim Lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415629</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 06 Dec 2007 08:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Thu, 06 Dec 2007 22:32:26 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Warum machst Du es nicht einfach mit C++ ? ... und C++ hat ja schließlich string ! <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>
<pre><code class="language-cpp">#include &lt;string&gt;
using std::string;

void EINGABE (string&amp;);

int main () {
   string INPUT ;
   cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;

   EINGABE(INPUT);

   cout &lt;&lt;endl&lt;&lt;endl;
   system (&quot;pause&quot;);
   return 0;
}

void EINGABE (string&amp; INPUT) {
   string einzelInput;
   do  {
      getline(cin, einzelInput); // OHNE &quot;cin.&quot; davor !!
      INPUT += einzelInput; 
      // oder falls Du das abschließende \n nicht dabei haben willst:
      // INPUT += einzelInput.substr(0, einzelInput.length()-1);
   } while (einzelInput.length());
}
</code></pre>
</blockquote>
<p>Hallo Simon2,<br />
getline liest bis inklusive newline, aber hängt das newline nicht an den Eingabestring an. D.h. man braucht nie ein '\n' entfernen, sondern muss höchstens eines hinzufügen, wenn man die Struktur der Zeilen erhalten möchte.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Dieses ganze char-Geraffel macht doch keinen glücklich und sieht auch noch blöd aus....<br />
So hast Du noch Alternativen wie z.B.:</p>
<pre><code class="language-cpp">void EINGABE(string&amp; INPUT) {
   string einzelInput;
   do  {
      cin &gt;&gt; einzelInput;
      if(einzelInput != &quot;-&quot;) INPUT += einzelInput;
   } while (einzelInput != &quot;-&quot;);
}
</code></pre>
</blockquote>
<p>Die Einlesen eines Strings liest i.A. ein Wort. D.h. mit diesem Code liest Du alle Worte ohne Zwischenräume (White Space) und hängst sie aneinander. Eine Eingabe von</p>
<blockquote>
<h2>das ist die erste Zeile<br />
und die zweite</h2>
</blockquote>
<p>hätte ein</p>
<pre><code class="language-cpp">INPUT = &quot;dasistdieersteZeileunddiezweite&quot;
</code></pre>
<p>zur Folge.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>oder (mein persönlicher Favorit):</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

void EINGABE(vector&lt;string&gt;&amp; INPUT) {
 std::copy(
         std::istream_iterator&lt;string&gt;(cin),
         std::istream_iterator&lt;string&gt;(),
         std::back_inserter(INPUT));
}
</code></pre>
</blockquote>
<p>dummerweise funktioniert das nicht, da der istream_iterator() so immer bis Fehler oder End-Of-File liest. Nur EOF gibt es bei cin nicht und Fehler passiert auch nicht, da jede Eingabe als string gelesen werden kann.</p>
<p>Hier mein Vorschlag:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

std::string EINGABE()
{
    using namespace std;
    string in;
    for( string line; getline( cin, line ) &amp;&amp; !line.empty(); )
        in += line + '\n';
    return in;
}

int main()
{
    using namespace std;
    cout &lt;&lt;endl&lt;&lt;&quot;Gib mehrere Zeilen ein!&quot;&lt;&lt;endl&lt;&lt;endl;
    string INPUT = EINGABE();

    cout &lt;&lt; &quot;-- Ihre Eingabe:\n&quot; &lt;&lt; INPUT &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Simon2 schrieb:</p>
<blockquote>
<p>(hier wird auch klar, warum eine separate Eingabe-Funktion überflüssig sein kann)</p>
<p>Letzteres weist Dich auf die logisch folgende Frage hin: Sollen <em>wirklich</em> alle Eingaben in demselben string bearbeitet werden ... oder ist es bei Dir nicht auch so wie bei 99,9% aller Anderen:<br />
Du möchtest schon die einzelnen Eingaben getrennt arbeiten, hältst es aber erstmal für einfacher, alles erst in einen String zu packen und hinterher wieder auseinander zu puhlen. <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>
</blockquote>
<p>Hier gebe ich Dir Recht. Man sollte das lesen, was man auch nachher im Programm haben will.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416209</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 06 Dec 2007 22:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Fri, 07 Dec 2007 06:16:34 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>dummerweise funktioniert das nicht, da der istream_iterator() so immer bis Fehler oder End-Of-File liest. Nur EOF gibt es bei cin nicht und Fehler passiert auch nicht, da jede Eingabe als string gelesen werden kann.</p>
</blockquote>
<p>Hier muss ich widersprechen. Natürlich gibt es EOF auch für cin, sonst würde kein UNIX-Konsolenprogramm funktionieren welches sowohl auf der Standardeingabe als auch auf Dateien arbeiten kann, und das sind so ziemlich alle Standard-Tools. Der Standardeingabestrom ist dann EOF wenn der Schreibende (Terminal oder Programm in einer Pipe) die Standardausgabe schließt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416244</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 07 Dec 2007 06:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to TEXT EINGABE in einer SCHLEIFE in C&#x2F;C++ on Fri, 07 Dec 2007 09:11:35 GMT]]></title><description><![CDATA[<p>Hi Werner,</p>
<p>danke für Deine Hinweise.<br />
Das Problem mit dem vector&lt;string&gt; bei cin ist mir das noch nicht untergekommen , da ich eigentlich immer Files und/oder Non-Strings einlese - aber Du hast natürlich Recht.</p>
<p>Ganz kurz zu den einzelnen Punkten:</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>...<br />
getline liest bis inklusive newline, aber hängt das newline nicht an den Eingabestring an. ...</p>
</blockquote>
<p>öh ... das habe ich anders erfahren. Bei meinem Compiler (gcc 3.4.4) wird auch das newline mit aufgenommen.<br />
Im Standard steht das aber tatsächlich anders (habe jetzt mal nachgeschlagen, Kap 21.3.7.9.6) ...</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>...Die Einlesen eines Strings liest i.A. ein Wort....</p>
</blockquote>
<p>Weiß ich - ich wollte auch nicht 1:1 die Anforderung umsetzen, sondern mehr zeigen, &quot;wie man in C++ aus streams einliest&quot;...</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>...dummerweise funktioniert das nicht, ...</p>
</blockquote>
<p>Stimmt auch - wie gesagt: Es ging mir mehr um &quot;den Umgang mit streams&quot; und &quot;Inputmengen&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416326</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 07 Dec 2007 09:11:35 GMT</pubDate></item></channel></rss>