<?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[Stimmt was im Puffer nicht?]]></title><description><![CDATA[<p>Hallo! <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>Habe folgendes Programm geschrieben, um eine Liste von Namen einzulesen un ggf. alphabetisch auszugeben. Leider nimmt das Programm nach ANzeige der Optionen keine EIngabe mehr entgegen. Ich dachte erst, es liegt am Puffer - nach dem Säubern wurde es aber nicht besser.</p>
<p>Bin blutiger Anfänger und arbeite mom. noch strikt nach Buch (Willms).<br />
Könntet ihr mir helfen und mir sagen, wo konkret der Fehler steckt?</p>
<p>Vielen Dank für eure Hilfe!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

int main()
{
    int i, j, k, opt;
    char namen[100][30], temp[30];

         do
         {
                     for(i=0; i&lt;100; i++)
                              for(k=0; k&lt;30; k++)
                                       namen[i][k] = '\0';

                     cout &lt;&lt; &quot;Bitte bestätigen Sie jeden eingegebenen Namen mit &lt;Enter&gt;\n&quot;
                             &quot;und beenden die Eingabe mit Strg-Z und &lt;Enter&gt;.\n\n&quot;;

                     for(i=0; i &lt; 99 &amp;&amp; (*namen[i-1] != EOF); i++)
                              cin.getline(namen[i], 30 , '\n');

                     cout &lt;&lt; &quot;\nFolgende Optionen stehen Ihnen zur Verfügung:\n&quot;
                             &quot;(1) Neue Liste eingeben\n&quot;
                             &quot;(2) Liste unsortiert ausgeben\n&quot;
                             &quot;(3) Liste alphabetisch sortiert ausgeben\n&quot;
                             &quot;(4) Programm verlassen\n\n&quot;;

                     while(cin.get() != '\n')
                     cin &gt;&gt; opt;

                     switch(opt)
                     {
                                case 2:
                                        for(i = 0; namen[i][0]; i++)
                                              cout &lt;&lt; namen[i] &lt;&lt; &quot;\n&quot;;
                                        cout &lt;&lt; &quot;\n\n&quot;;
                                        break;

                                case 3:
                                        for(i = 0; namen[i][0]; i++);              // Bis erstes Nullzeichen-Feld scannen

                                        while(i+1)
                                        {
                                              for (k = i; k + 1 &gt; 0; k--)
                                              {
                                                  if(strcmp(namen[i], namen[i+1]) &gt; 0)
                                                  {
                                                           strcpy(temp, namen[i]);
                                                           strcpy(namen[i], namen[i + 1]);
                                                           strcpy(namen[i + 1], temp);
                                                  }   
                                              }

                                              i--;
                                        }    

                                        for(i = 0; namen[i][0]; i++)
                                              cout &lt;&lt; namen[i] &lt;&lt; &quot;\n&quot;;
                                        cout &lt;&lt; &quot;\n\n&quot;;
                                        break;
                     }

         }while(opt != 4);                            

         cout &lt;&lt; &quot;Auf Wiedersehen!\n\n&quot;;
         system(&quot;pause&quot;);
         return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/222701/stimmt-was-im-puffer-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 20:46:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222701.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Sep 2008 11:19:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stimmt was im Puffer nicht? on Tue, 16 Sep 2008 11:20:03 GMT]]></title><description><![CDATA[<p>Hallo! <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>Habe folgendes Programm geschrieben, um eine Liste von Namen einzulesen un ggf. alphabetisch auszugeben. Leider nimmt das Programm nach ANzeige der Optionen keine EIngabe mehr entgegen. Ich dachte erst, es liegt am Puffer - nach dem Säubern wurde es aber nicht besser.</p>
<p>Bin blutiger Anfänger und arbeite mom. noch strikt nach Buch (Willms).<br />
Könntet ihr mir helfen und mir sagen, wo konkret der Fehler steckt?</p>
<p>Vielen Dank für eure Hilfe!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

int main()
{
    int i, j, k, opt;
    char namen[100][30], temp[30];

         do
         {
                     for(i=0; i&lt;100; i++)
                              for(k=0; k&lt;30; k++)
                                       namen[i][k] = '\0';

                     cout &lt;&lt; &quot;Bitte bestätigen Sie jeden eingegebenen Namen mit &lt;Enter&gt;\n&quot;
                             &quot;und beenden die Eingabe mit Strg-Z und &lt;Enter&gt;.\n\n&quot;;

                     for(i=0; i &lt; 99 &amp;&amp; (*namen[i-1] != EOF); i++)
                              cin.getline(namen[i], 30 , '\n');

                     cout &lt;&lt; &quot;\nFolgende Optionen stehen Ihnen zur Verfügung:\n&quot;
                             &quot;(1) Neue Liste eingeben\n&quot;
                             &quot;(2) Liste unsortiert ausgeben\n&quot;
                             &quot;(3) Liste alphabetisch sortiert ausgeben\n&quot;
                             &quot;(4) Programm verlassen\n\n&quot;;

                     while(cin.get() != '\n')
                     cin &gt;&gt; opt;

                     switch(opt)
                     {
                                case 2:
                                        for(i = 0; namen[i][0]; i++)
                                              cout &lt;&lt; namen[i] &lt;&lt; &quot;\n&quot;;
                                        cout &lt;&lt; &quot;\n\n&quot;;
                                        break;

                                case 3:
                                        for(i = 0; namen[i][0]; i++);              // Bis erstes Nullzeichen-Feld scannen

                                        while(i+1)
                                        {
                                              for (k = i; k + 1 &gt; 0; k--)
                                              {
                                                  if(strcmp(namen[i], namen[i+1]) &gt; 0)
                                                  {
                                                           strcpy(temp, namen[i]);
                                                           strcpy(namen[i], namen[i + 1]);
                                                           strcpy(namen[i + 1], temp);
                                                  }   
                                              }

                                              i--;
                                        }    

                                        for(i = 0; namen[i][0]; i++)
                                              cout &lt;&lt; namen[i] &lt;&lt; &quot;\n&quot;;
                                        cout &lt;&lt; &quot;\n\n&quot;;
                                        break;
                     }

         }while(opt != 4);                            

         cout &lt;&lt; &quot;Auf Wiedersehen!\n\n&quot;;
         system(&quot;pause&quot;);
         return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1582777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582777</guid><dc:creator><![CDATA[Tonikum]]></dc:creator><pubDate>Tue, 16 Sep 2008 11:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stimmt was im Puffer nicht? on Tue, 16 Sep 2008 11:21:05 GMT]]></title><description><![CDATA[<p>Kein Wunder, STRG-Z schließt ja auch die Eingabe. Ich würde stattdessen eine Leerzeile verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582778</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 16 Sep 2008 11:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Stimmt was im Puffer nicht? on Tue, 16 Sep 2008 12:11:58 GMT]]></title><description><![CDATA[<p>Hui das geht ja fix hier <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="🙂"
    /> ich guck gleich mal, danke</p>
<p>Hab jetz mal anstelle von EOF das Zeichen '@' verlangt - funktioniert leider dennoch nicht. Es werden zwar Eingaben entgegeben genommen, jedoch passiert zuerst nichts. Nach der 3. Eingabe einer Zahl soll ich dann eine neue Liste eingeben - unabhängig von meiner Auswahl <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582819</guid><dc:creator><![CDATA[Tonikum]]></dc:creator><pubDate>Tue, 16 Sep 2008 12:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Stimmt was im Puffer nicht? on Tue, 16 Sep 2008 20:01:17 GMT]]></title><description><![CDATA[<p>Krieg's nicht gebacken :((</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1583105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1583105</guid><dc:creator><![CDATA[Tonikum]]></dc:creator><pubDate>Tue, 16 Sep 2008 20:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to Stimmt was im Puffer nicht? on Wed, 17 Sep 2008 05:46:30 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Dieser Vergleich kann nicht funktionieren:</p>
<pre><code class="language-cpp">(*namen[i-1] != EOF)
</code></pre>
<p>Beim ersten Zugriff müsste ist der Index -1. Du prüfst also die letzte Eingabe immer einmal zu spät (wenn du zur zweiten Eingabe kommst, prüfst du dort was in der ersten Eingabe stand). Du musst hier einfach [i] statt [i-1] verwenden. Das ganze kannst du ganz leicht im Debugger rekonstruieren mit diesem Snippet:</p>
<pre><code class="language-cpp">char c[101][21] = {0};

char last = ' ';
for(int i = 0; *c[i-1]!='.'; ++i) {
  cin.getline(c[i], 20);
  last = *c[i-1]; // hier kannst du zusätzlich sehen das es nicht klappt
}

cout &lt;&lt; last &lt;&lt; endl;
</code></pre>
<p>Außerdem ist es bestimmt nicht garantiert das ein Zugriff mit Index -1 funktionieren muss, da das normalerweise außerhalb des gültigen Bereichs liegt.</p>
<p>Greetz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1583196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1583196</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Wed, 17 Sep 2008 05:46:30 GMT</pubDate></item></channel></rss>