<?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[Frage zu cin.get und newline]]></title><description><![CDATA[<p>Hallo liebe Gemeinde.</p>
<p>Seit gestern beschäftige ich mich mit dem Thema Array.</p>
<p>In dem Buch, das ich verwende, ist folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
  char buffer[80];
  cout &lt;&lt; &quot;Geben Sie einen String ein: &quot;;
  cin.get(buffer,79) // Maximal 79 Zeichen oder bis newline einlesen
  cout &lt;&lt; &quot;Inhalt des Puffers: &quot; &lt;&lt; buffer &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Nun zu meinen Fragen:</p>
<p>Wo müsste &quot;newline&quot; wie eingesetzt werden? Was bewirkt eigentlich newline?</p>
<p>Danke für die Antworten im Voraus.</p>
<p>Gruß</p>
<p>Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/310275/frage-zu-cin-get-und-newline</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 21:43:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310275.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Nov 2012 19:01:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:01:10 GMT]]></title><description><![CDATA[<p>Hallo liebe Gemeinde.</p>
<p>Seit gestern beschäftige ich mich mit dem Thema Array.</p>
<p>In dem Buch, das ich verwende, ist folgendes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
  char buffer[80];
  cout &lt;&lt; &quot;Geben Sie einen String ein: &quot;;
  cin.get(buffer,79) // Maximal 79 Zeichen oder bis newline einlesen
  cout &lt;&lt; &quot;Inhalt des Puffers: &quot; &lt;&lt; buffer &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Nun zu meinen Fragen:</p>
<p>Wo müsste &quot;newline&quot; wie eingesetzt werden? Was bewirkt eigentlich newline?</p>
<p>Danke für die Antworten im Voraus.</p>
<p>Gruß</p>
<p>Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268676</guid><dc:creator><![CDATA[silent_max]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:14:49 GMT]]></title><description><![CDATA[<p>Sicher, dass du newline meinst?<br />
Am ende eines cstrings setzt man für gewöhnlich eine 0 ( '\0' ).<br />
Damit zeigt man, dass das array, in dem Fall ein cstring zu ende ist.</p>
<p>Hast du das mit newline gemeint?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268683</guid><dc:creator><![CDATA[akoww]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:17:36 GMT]]></title><description><![CDATA[<p>Ja habe ich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268686</guid><dc:creator><![CDATA[silent_max]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:23:36 GMT]]></title><description><![CDATA[<p>Vllt noch einmal zum Verständnis:</p>
<p>Das '\0' setzt man NUR bei cstring, damit Funktionen wie strlen und co wissen wo das ende des string ist und dir z.B. die Länge ausgeben.</p>
<p>Bei anderen arrays z.B. int array oder sonst noch was, kannst du das ende des arrays nicht mit '\0' terminieren, dort musst du separat irgendwo die länge speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268691</guid><dc:creator><![CDATA[akoww]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:28:31 GMT]]></title><description><![CDATA[<p>akoww schrieb:</p>
<blockquote>
<p>Das '\0' setzt man NUR bei cstring, damit Funktionen wie strlen und co wissen wo das ende des string ist und dir z.B. die Länge ausgeben.</p>
</blockquote>
<p>Ok ... das habe ich vorher nicht gewusst.</p>
<p>Was meinst Du mit &quot;cstring&quot;??</p>
<p>Nur damit ich das richtig verstehe...</p>
<p>Normale Arrays: Länge wird vorher definiert<br />
char Array: wird mit '\0' beendet</p>
<p>Habe ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268694</guid><dc:creator><![CDATA[silent_max]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:49:10 GMT]]></title><description><![CDATA[<p>Ein cstring ist ein char array.<br />
Ein string ist ein eigener Datentyp von C++. siehe std::string</p>
<p>beispiel für char array</p>
<pre><code>char a[] =  &quot;hallo welt&quot;; // char array der länge 10+1 ( +1 ist das '\0' )
char *b = &quot;hallo welt&quot;;  // wie oben
char c[40] = &quot;hallo welt&quot;; // array größe von 40, aber text länge ist 10+1
</code></pre>
<p>bei allen diesen Varianten wird nach dem letzten Zeichen automatisch ein '\0' gesetzt</p>
<p>nur bei cstring ist das '\0' relevant, bei allen anderen arrays nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268708</guid><dc:creator><![CDATA[akoww]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 19:58:41 GMT]]></title><description><![CDATA[<p>Ok dank Dir, das hat mir sehr geholfen.</p>
<p>Dieses Forum ist einfach spitze...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268714</guid><dc:creator><![CDATA[silent_max]]></dc:creator><pubDate>Wed, 07 Nov 2012 19:58:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:13:52 GMT]]></title><description><![CDATA[<p>silent_max schrieb:</p>
<blockquote>
<p>Was meinst Du mit &quot;cstring&quot;??</p>
</blockquote>
<p><a href="https://www.google.de/search?&amp;q=C-String" rel="nofollow">Google: C-String</a><br />
Damit meint man die Strings die man in C verwendet hat, und nicht eine Form von Tangas (wie im Web zu finden). Mit C-String ist ein Zeiger auf den ersten Buchstaben einer Zeichenkette im Speicher, bzw. diese Zeichenkette selbst gemeint. Der String geht dann offiziell bis zum nächsten im Speicher stehenden Terminierungszeichen (0).</p>
<blockquote>
<p>Normale Arrays: Länge wird vorher definiert<br />
char Array: wird mit '\0' beendet</p>
</blockquote>
<p><strong>Nein.</strong><br />
char-Arrays sind auch nur ganz normale Arrays.<br />
Bei C-Strings (hier meine ich die Zeichenketten im Speicher) wird, um das Ende zu signalisieren, ein Terminierungszeichen - '\0' (ASCII-Wert: auch 0) verwendet. Weil jedoch ein char-Array oft wie ein C-String behandelt wird (dank array-to-pointer decay zerfällt ein char-Array in einen Zeiger auf das erste Element, also einen C-String) wird oft als letztes Element im char-Array ein Terminierungszeichen gesetzt.</p>
<blockquote>
<p>Habe ich das richtig verstanden?</p>
</blockquote>
<p>Nein. Dir fehlen massive Grundlagen.</p>
<p>Was haste für ein Buch?</p>
<p>akoww schrieb:</p>
<blockquote>
<p>Vllt noch einmal zum Verständnis:</p>
<p>Das '\0' setzt man NUR bei cstring, damit Funktionen wie strlen und co wissen wo das ende des string ist und dir z.B. die Länge ausgeben.</p>
<p>Bei anderen arrays z.B. int array oder sonst noch was, kannst du das ende des arrays nicht mit '\0' terminieren, dort musst du separat irgendwo die länge speichern.</p>
</blockquote>
<p>Ein C-String ist kein Array. Man signalisiert auch nicht das Ende eines C-Arrays mit '\0'. Ein C-Array kann auch hundert Terminierungszeichen enthalten.</p>
<p>akoww schrieb:</p>
<blockquote>
<p>Sicher, dass du newline meinst?<br />
Am ende eines cstrings setzt man für gewöhnlich eine 0 ( '\0' ).<br />
Damit zeigt man, dass das array, in dem Fall ein cstring zu ende ist.</p>
<p>Hast du das mit newline gemeint?</p>
</blockquote>
<p>Du hast wohl auch nichts verstanden.</p>
<p><strong>Die get()-Methode mit <code>cin</code> als Objekt liest alles bis zum ersten newline, also bis du [Enter] drückst. Das ist damit gemeint.</strong></p>
<blockquote>
<p>Ein cstring ist ein char array.</p>
</blockquote>
<p>Falsch.</p>
<blockquote>
<pre><code>char a[] =  &quot;hallo welt&quot;; // char array der länge 10+1 ( +1 ist das '\0' )
char *b = &quot;hallo welt&quot;;  // wie oben
</code></pre>
</blockquote>
<p>Nein, nicht wie oben. Der typ von a ist anders. Aber schön dass du erkannt hast, dass a kein C-String ist.</p>
<blockquote>
<p>bei allen diesen Varianten wird nach dem letzten Zeichen automatisch ein '\0' gesetzt</p>
</blockquote>
<p>Wäre noch schön, wenn du uns sagen könntest wieso genau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268717</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:10:54 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Dir fehlen massive Grundlagen.</p>
</blockquote>
<p>Dito.<br />
Du brabbelst irgend etwas vor dich hin, Sone.</p>
<p>Den entscheidenden Punkt hast du nicht erwähnt.</p>
<pre><code class="language-cpp">char a[] =  &quot;hallo welt&quot;; // char array der länge 10+1 ( +1 ist das '\0' )
char *b = &quot;hallo welt&quot;;  // wie oben
</code></pre>
<p>Dieser Code ist nämlich falsch.</p>
<p>b ist ein Pointer auf ein String-Literal, das konstant ist. Es muss also richtig heissen:</p>
<pre><code class="language-cpp">char a[] =  &quot;hallo welt&quot;;
const char *b = &quot;hallo welt&quot;;  // note the const!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2268726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268726</guid><dc:creator><![CDATA[trollkopf]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:12:01 GMT]]></title><description><![CDATA[<p>trollkopf schrieb:</p>
<blockquote>
<p>Den entscheidenden Punkt hast du nicht erwähnt.</p>
<pre><code class="language-cpp">char a[] =  &quot;hallo welt&quot;; // char array der länge 10+1 ( +1 ist das '\0' )
char *b = &quot;hallo welt&quot;;  // wie oben
</code></pre>
<p>Dieser Code ist nämlich falsch.</p>
</blockquote>
<p>Der entscheidende Punkt? Willst du mich jetzt völlig veralbern? XD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268730</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:54:15 GMT]]></title><description><![CDATA[<p>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268735</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:48:24 GMT]]></title><description><![CDATA[<p>h4x0r, wenn man keine Ahnung hat ... den Rest kennst du.</p>
<p>ISO/IEC 14882:2011(E) § 2.14.5 12) schrieb:</p>
<blockquote>
<p>Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementationdefined. <strong>The effect of attempting to modify a string literal is undefined.</strong></p>
</blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>b ist ein Zeiger auf einen String, also ein C-String.<br />
Dieser C-String enthält die Zeichen aus dem entsprechendem Literal.</p>
</blockquote>
<p>Quatsch mit Soße und Herumtänzelei. <code>b</code> ist ein Zeiger auf einen Zeichenkettenliteral, der tunlichst auf <code>char const</code> zeigen sollte.</p>
<p>Sone schrieb:</p>
<blockquote>
<p>char-Arrays sind auch nur ganz normale Arrays.<br />
[...]<br />
Ein C-String ist kein Array.</p>
<blockquote>
<p>Ein cstring ist ein char array.</p>
</blockquote>
<p>Falsch.</p>
</blockquote>
<p>Sag' mal, wie nennst <em>du</em> Dinger, die sequentiell im Speicher liegen!?</p>
<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>bei allen diesen Varianten wird nach dem letzten Zeichen automatisch ein '\0' gesetzt</p>
</blockquote>
<p>Wäre noch schön, wenn du uns sagen könntest wieso genau.</p>
</blockquote>
<p>Sag's du ihm doch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268741</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:56:26 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Quatsch mit Soße und Herumtänzelei. <code>b</code> ist ein Zeiger auf einen Zeichenkettenliteral, der tunlichst auf <code>char const</code> zeigen sollte.</p>
</blockquote>
<p>Gut, ist weg.</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Sag' mal, wie nennst <em>du</em> Dinger, die sequentiell im Speicher liegen!?</p>
</blockquote>
<p>&quot;Dinger&quot;?<br />
Zeichen, die sequentiell liegen, nenne ich String.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268749</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 20:56:35 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>bei allen diesen Varianten wird nach dem letzten Zeichen automatisch ein '\0' gesetzt</p>
</blockquote>
<p>Wäre noch schön, wenn du uns sagen könntest wieso genau.</p>
</blockquote>
<p>Sag's du ihm doch!</p>
</blockquote>
<p>Na gut, hier.</p>
<p>§2.14.5 / 14</p>
<blockquote>
<p>After any necessary concatenation, in translation phase 7 (2.2), ’\0’ is appended to every string literal so<br />
that programs that scan a string can find its end.</p>
</blockquote>
<p>Also @TE: Jedes String-Literal ist Nullterminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268753</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 07 Nov 2012 20:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu cin.get und newline on Wed, 07 Nov 2012 21:14:53 GMT]]></title><description><![CDATA[<p>Zurück zum Thema:</p>
<p>silent_max schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Geben Sie einen String ein: &quot;;
cin.get( buffer, 79 ) // Maximal 79 Zeichen oder bis newline einlesen
</code></pre>
<p>Wo müsste &quot;newline&quot; wie eingesetzt werden? Was bewirkt eigentlich newline?</p>
</blockquote>
<p>In diesem Beispiel musst du newline (Neue-Zeile-Zeichen, '\n') nirgends einsetzen.<br />
Der Kommentar will dir sagen, daß <code>cin.get()</code> Zeichen in <code>buffer</code> einlist, bis <code>79</code> Zeichen eingelesen sind, oder vorher ein <code>'\n'</code> eingelesen wird. Sollte noch bevor <code>79</code> Zeichen erreicht sind ein <code>'\n'</code> daherkommen, wird dieses Zeichen (im gegensatz zu <code>getline</code> ) <em>nicht</em> in <code>buffer</code> landen.</p>
<p>Etwas Zwischen <code>&quot;</code> und <code>&quot;</code> ist ein Zeichenkettenliteral (string literal). Der Compiler hängt an einen Zeichenkettenliteral lt. Standard - Sone zitierte - eine Null an. Als <code>int</code> ist das eine <code>0</code> , als <code>char</code> ein '\0'. Verändern darfst du Zeichenkettenliterale zur Programmlaufzeit nicht:</p>
<pre><code>char foo[] = &quot;bla blabb&quot;; // ein Array aus char, das vom Compiler mit dem Zeichenkettenliteral + [c]'\0'[/c] befüllt wird.

foo[ 6 ] = 'u';  // ok.

char *bar = &quot;bla blabb&quot;; // ein Zeiger auf char, Zeigt auf das erste Zeichen 
                         // des Zeichenkettenliterals

bar[ 6 ] = 'u'; // Undefiniertes Verhalten -&gt; dein Rechner dürfte mit Fug und 
                // Recht in die Luft fliegen, eine Pizza bestellen, sonstwas.
</code></pre>
<p>Darum deklariert man Zeiger auf Zeichenkettenliterale immer als Zeiger auf konstantes (nicht veränderbares) char: <code>char const *</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268756</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 07 Nov 2012 21:14:53 GMT</pubDate></item></channel></rss>