<?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[atoi() und char str[]]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>vielleicht kann mir jemand eine Erklärung geben.<br />
Bin in Sachen C++ noch Anfänger.</p>
<p>Ich verstehe folgendes nicht, ich bin dabei, gerade eine Aufgabe aus einem C++ Buch zu lösen. Eine funktionierende Lösung sieht so aus:</p>
<pre><code class="language-cpp">void Loesung1()
{
	int Ergebnis = 0;
	char sA, sB, sC, sD;

	cout &lt;&lt; &quot;Bitte geben Sie eine 4stellige Zahl ein: &quot;;
	sA = _getch(); cout &lt;&lt; sA;
	sB = _getch(); cout &lt;&lt; sB;
	sC = _getch(); cout &lt;&lt; sC;
	sD = _getch(); cout &lt;&lt; sD &lt;&lt; endl;

	Ergebnis = atoi(&amp;sA) + atoi(&amp;sB) + atoi(&amp;sC) + atoi(&amp;sD);

	cout &lt;&lt; &quot;Die Quersumme von &quot; &lt;&lt; sA &lt;&lt; sB &lt;&lt; sC &lt;&lt; sD &lt;&lt; &quot; lautet: &quot; &lt;&lt; Ergebnis &lt;&lt; endl;
}
</code></pre>
<p>Nun habe ich eine 2. Funktion mit einer 2. möglichen Lösung geschrieben, da ich nicht 4 char variablen verwenden möchte:</p>
<pre><code class="language-cpp">void Loesung2()
{
	int Ergebnis = 0;
	char str[5];

	cout &lt;&lt; &quot;Bitte geben Sie eine 4stellige Zahl ein: &quot;;
	cin &gt;&gt; str;

	Ergebnis = atoi(&amp;str[0]) + atoi(&amp;str[1]) + atoi(&amp;str[2]) + atoi(&amp;str[3]);

	cout &lt;&lt; &quot;Die Quersumme von &quot; &lt;&lt; str &lt;&lt; &quot; lautet: &quot; &lt;&lt; Ergebnis &lt;&lt; endl;
}
</code></pre>
<p>Meine Frage dazu ist nun, warum wird in der 2. Lösung nicht der Wert des typs char an die Funktion atoi() geliefert, sondern deren Ascii-Wert und wie kann ich das verhindern, oder wie verwandle ich innerhalb des atoi()-Aufrufs den Ascii-Wert in den eingegebenen Wert?</p>
<p>Im ersten Beispiel wird ja auch der Wert selbst und nicht der Ascii-Wert übergeben. Was mache ich falsch?</p>
<p>Ich hoffe Ihr versteht mein Problem <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>Edit: Sorry für falsches Forum. Wenn schon keiner auf meine Frage antwortet, kann wenigstens jemand den Thread ins C++ Forum verschieben. Danke <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>Viele Grüße<br />
Zalkortis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234207/atoi-und-char-str</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 11:55:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234207.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Feb 2009 17:10:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to atoi() und char str[] on Sat, 14 Feb 2009 17:59:05 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>vielleicht kann mir jemand eine Erklärung geben.<br />
Bin in Sachen C++ noch Anfänger.</p>
<p>Ich verstehe folgendes nicht, ich bin dabei, gerade eine Aufgabe aus einem C++ Buch zu lösen. Eine funktionierende Lösung sieht so aus:</p>
<pre><code class="language-cpp">void Loesung1()
{
	int Ergebnis = 0;
	char sA, sB, sC, sD;

	cout &lt;&lt; &quot;Bitte geben Sie eine 4stellige Zahl ein: &quot;;
	sA = _getch(); cout &lt;&lt; sA;
	sB = _getch(); cout &lt;&lt; sB;
	sC = _getch(); cout &lt;&lt; sC;
	sD = _getch(); cout &lt;&lt; sD &lt;&lt; endl;

	Ergebnis = atoi(&amp;sA) + atoi(&amp;sB) + atoi(&amp;sC) + atoi(&amp;sD);

	cout &lt;&lt; &quot;Die Quersumme von &quot; &lt;&lt; sA &lt;&lt; sB &lt;&lt; sC &lt;&lt; sD &lt;&lt; &quot; lautet: &quot; &lt;&lt; Ergebnis &lt;&lt; endl;
}
</code></pre>
<p>Nun habe ich eine 2. Funktion mit einer 2. möglichen Lösung geschrieben, da ich nicht 4 char variablen verwenden möchte:</p>
<pre><code class="language-cpp">void Loesung2()
{
	int Ergebnis = 0;
	char str[5];

	cout &lt;&lt; &quot;Bitte geben Sie eine 4stellige Zahl ein: &quot;;
	cin &gt;&gt; str;

	Ergebnis = atoi(&amp;str[0]) + atoi(&amp;str[1]) + atoi(&amp;str[2]) + atoi(&amp;str[3]);

	cout &lt;&lt; &quot;Die Quersumme von &quot; &lt;&lt; str &lt;&lt; &quot; lautet: &quot; &lt;&lt; Ergebnis &lt;&lt; endl;
}
</code></pre>
<p>Meine Frage dazu ist nun, warum wird in der 2. Lösung nicht der Wert des typs char an die Funktion atoi() geliefert, sondern deren Ascii-Wert und wie kann ich das verhindern, oder wie verwandle ich innerhalb des atoi()-Aufrufs den Ascii-Wert in den eingegebenen Wert?</p>
<p>Im ersten Beispiel wird ja auch der Wert selbst und nicht der Ascii-Wert übergeben. Was mache ich falsch?</p>
<p>Ich hoffe Ihr versteht mein Problem <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>Edit: Sorry für falsches Forum. Wenn schon keiner auf meine Frage antwortet, kann wenigstens jemand den Thread ins C++ Forum verschieben. Danke <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>Viele Grüße<br />
Zalkortis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663844</guid><dc:creator><![CDATA[Zalkortis]]></dc:creator><pubDate>Sat, 14 Feb 2009 17:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to atoi() und char str[] on Sat, 14 Feb 2009 18:07:45 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-18363.html" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663879</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 14 Feb 2009 18:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to atoi() und char str[] on Sat, 14 Feb 2009 19:00:05 GMT]]></title><description><![CDATA[<p>atoi() geht im String bis zum ersten Nullbyte, und vom Anfang bis dort hin wird die<br />
Zahl angenommen. ZB:</p>
<pre><code class="language-cpp">char *str = &quot;1234&quot;;

// dann ergibt ein Aufruf von atoi()
atoi(str);      // =&gt; 1234 als Ganzahl

// den Ziffern-Wert der ersten Stelle kannst du im ASCII-Satz ganz einfach ermitteln:
str[0] - '0';   // =&gt; 1 als Ganzzahl
str[2] - '0';   // =&gt; 3 als Ganzzahl
</code></pre>
<p>Auf atoi() würde ich in dem Fall ganz verzichten.</p>
<p>(Daraus folgt auch, daß deine beiden Varianten nicht &quot;funktionieren&quot;, es könnte in der<br />
ersten ja nach einer der char-Variablen im Speicher noch eine Ziffer sein.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663901</guid><dc:creator><![CDATA[bgdnoy]]></dc:creator><pubDate>Sat, 14 Feb 2009 19:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to atoi() und char str[] on Sat, 14 Feb 2009 22:16:14 GMT]]></title><description><![CDATA[<p>Danke für Deine Antwort <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>Ich habe nun mal das folgende probiert:</p>
<pre><code class="language-cpp">Ergebnis = str[0] + str[1] + str[2] + str[3];
</code></pre>
<p>allerdings kommt dann bei &quot;1234&quot; als Ergebis anstatt 10 die Zahl 202.<br />
Warum Lösung 1 funktioiert und Lösung 2 nicht, habe ich bisher nicht ganz verstanden.</p>
<p>Gruß<br />
Zalkortis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663981</guid><dc:creator><![CDATA[Zalkortis]]></dc:creator><pubDate>Sat, 14 Feb 2009 22:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to atoi() und char str[] on Sat, 14 Feb 2009 22:37:45 GMT]]></title><description><![CDATA[<blockquote>
<p>allerdings kommt dann bei &quot;1234&quot; als Ergebis anstatt 10 die Zahl 202.</p>
</blockquote>
<p>Ganz richtig.</p>
<p>Die Quersumme wäre 10. Das sind also genau 192 zu viel, und das ist vier mal 48, und<br />
48 entspricht ganz genau '0' im ASCII-System. Deshalb hatte ich geraten, '0' zu subtrahieren.</p>
<p>Nochmal:<br />
Die erste Variante funktioniert auch nicht, und wenn doch, dann nur zufällig, und nicht<br />
unbedingt. Google mach nach nasal demon.</p>
<p>atoi() braucht mindestens <em>zwei</em> Zeichen, um in jedem Fall korrekt zu arbeiten:<br />
ein gültiges Zeichen (oder mehr) und danach ein Nullbyte ('\0' - nicht zu verwechseln mit '0').</p>
<p>Wenn du weißt, daß ein Zeichen eine Ziffer darstellt, dann bekommt du den Wert der Ziffer<br />
am einfachsten so, wie ich oben beschrieben habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663984</guid><dc:creator><![CDATA[bgdnoy]]></dc:creator><pubDate>Sat, 14 Feb 2009 22:37:45 GMT</pubDate></item></channel></rss>