<?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[Taschenrechner Frage]]></title><description><![CDATA[<p>Hallo!<br />
ich will ein Char in ein int &quot;umcasten&quot;, d.h. einfach neu einlesen in eine Integer-Variable als in ein Char.</p>
<p>Folgender Code aus der C++-Referenz:</p>
<pre><code class="language-cpp">// istream putback
#include &lt;iostream&gt;
using namespace std;

int main () {
  char c;
  int n;
  char str[256];

  cout &lt;&lt; &quot;Enter a number or a word: &quot;;
  c = cin.get();

  if ( (c &gt;= '0') &amp;&amp; (c &lt;= '9') )
  {
    cin.putback (c);
    cin &gt;&gt; n;
    cout &lt;&lt; &quot;You have entered number &quot; &lt;&lt; n &lt;&lt; endl;
  }
  else
  {
    cin.putback (c);
    cin &gt;&gt; str;
    cout &lt;&lt; &quot; You have entered word &quot; &lt;&lt; str &lt;&lt; endl;
  }

  return 0;
}
</code></pre>
<p>Wieso kommt hier dann keine Eingabe-Aufforderung trotz cin? In meinem Code fragt er nach einer Eingabe. Ich kann eingeben, was ich will, am Ende füllt er in die Variable den korrekten Wert. Wie &quot;unterbinde&quot; ich die Eingabe-Aufforderung?</p>
<pre><code class="language-cpp">// main.cpp
char str[8];
cin.getline(str, 8);
TRechner t1;
t1.Calc(str);

//calc.hpp
char curr;
char *line;

// ...

void TRechner::Calc(const char *l) { // Bekommt C-String und soll auswerten
	int number; // für zahlenspeicher
	int type; // plus, minus, mal, durch, zahl oder buchstabe?
	strcpy(line, l);
	for(int offset = strlen(line) - 1; offset &gt;= 0; offset--) {
		if(line[offset] == ' ') continue;
		type = Parse(offset); // Füllt in Attribut curr das aktuelle char, type ist aus Enum
		switch(type) {
			// ...
			case NUMBER:
				cin.putback(curr); // current char zurücksetzen
				cin &gt;&gt; number; // in number einlesen, Wieso Eingabe-Aufforderung?
				cout &lt;&lt; &quot;Number: &quot; &lt;&lt; number &lt;&lt; endl; // ausgeben
				break;
			// ...
		}
	}
}
</code></pre>
<p>Danke für Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243449/taschenrechner-frage</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 03:27:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243449.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Jun 2009 19:44:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Taschenrechner Frage on Tue, 16 Jun 2009 19:47:40 GMT]]></title><description><![CDATA[<p>Hallo!<br />
ich will ein Char in ein int &quot;umcasten&quot;, d.h. einfach neu einlesen in eine Integer-Variable als in ein Char.</p>
<p>Folgender Code aus der C++-Referenz:</p>
<pre><code class="language-cpp">// istream putback
#include &lt;iostream&gt;
using namespace std;

int main () {
  char c;
  int n;
  char str[256];

  cout &lt;&lt; &quot;Enter a number or a word: &quot;;
  c = cin.get();

  if ( (c &gt;= '0') &amp;&amp; (c &lt;= '9') )
  {
    cin.putback (c);
    cin &gt;&gt; n;
    cout &lt;&lt; &quot;You have entered number &quot; &lt;&lt; n &lt;&lt; endl;
  }
  else
  {
    cin.putback (c);
    cin &gt;&gt; str;
    cout &lt;&lt; &quot; You have entered word &quot; &lt;&lt; str &lt;&lt; endl;
  }

  return 0;
}
</code></pre>
<p>Wieso kommt hier dann keine Eingabe-Aufforderung trotz cin? In meinem Code fragt er nach einer Eingabe. Ich kann eingeben, was ich will, am Ende füllt er in die Variable den korrekten Wert. Wie &quot;unterbinde&quot; ich die Eingabe-Aufforderung?</p>
<pre><code class="language-cpp">// main.cpp
char str[8];
cin.getline(str, 8);
TRechner t1;
t1.Calc(str);

//calc.hpp
char curr;
char *line;

// ...

void TRechner::Calc(const char *l) { // Bekommt C-String und soll auswerten
	int number; // für zahlenspeicher
	int type; // plus, minus, mal, durch, zahl oder buchstabe?
	strcpy(line, l);
	for(int offset = strlen(line) - 1; offset &gt;= 0; offset--) {
		if(line[offset] == ' ') continue;
		type = Parse(offset); // Füllt in Attribut curr das aktuelle char, type ist aus Enum
		switch(type) {
			// ...
			case NUMBER:
				cin.putback(curr); // current char zurücksetzen
				cin &gt;&gt; number; // in number einlesen, Wieso Eingabe-Aufforderung?
				cout &lt;&lt; &quot;Number: &quot; &lt;&lt; number &lt;&lt; endl; // ausgeben
				break;
			// ...
		}
	}
}
</code></pre>
<p>Danke für Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1727873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1727873</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 16 Jun 2009 19:47:40 GMT</pubDate></item><item><title><![CDATA[Reply to Taschenrechner Frage on Tue, 16 Jun 2009 21:00:18 GMT]]></title><description><![CDATA[<p>&quot;cin&quot; ist kein Befehl für &quot;Mach eine Eingabeaufforderung&quot;. Das ist ein Eingabestrom. Das Konzept der C++-Streams kann ich an dieser Stelle nicht vollständig erklären, da solltest du in einem Buch oder einer guten Internetquelle nachlesen. Was der Beispielcode den du angibst ungefähr macht:</p>
<p>Er bindet den header &lt;iostream&gt; ein. Neben den allgemeinen Streamklassen beinhaltet dieser auch einen speziellen Stream namens &quot;cin&quot; der an die Standardeingabe der gebunden ist (Ich vermute das soll für console-input stehen, aber genau weiß ich es nicht). Je nachdem an was für einem System du arbeitest, muss die Standardeingabe nicht unbedingt die Tastatur sein, aber diese verkomplizierung will ich hier nicht noch extra betrachen. Im folgenden nehme ich an, dass die Standardeingabe über die Tastatur erfolgt. In diesem Fall ist &quot;cin&quot; beim Programmstart erstmal leer. Daher kommt beim</p>
<pre><code class="language-cpp">c = cin.get();
</code></pre>
<p>erstmal eine Eingabeaufforderung, denn der Befehl lautet solange aus dem Strom zu lesen, bis ein newline-Zeichen kommt. Und dieses newline kommt nunmal erst, wenn man die Entertaste drückt. wird die Entertaste gedrückt ist cin wieder leer und alles was vor dem newline kam steht nun in der Variablen &quot;c&quot;.</p>
<p>Danach macht das Programm aber etwas für Anfänger sehr verwirrendes: Es schreibt mittels</p>
<pre><code class="language-cpp">cin.putback (c);
</code></pre>
<p>in den cin-stream. cin enthält nun den Inhalt von &quot;c&quot;. Der nächste Befehl</p>
<pre><code class="language-cpp">cin &gt;&gt; n;
</code></pre>
<p>kann daher ausgeführt werden, ohne dass der Benutzer eine Eingabe macht, da ja schon etwas im Stream steht.</p>
<p>Ich hofffe, das Beispielprogramm wäre soweit für dich erklärt.</p>
<p><strong>Zu deinem eigentlichen Problem:</strong><br />
char (keine char Arrays!) kann man direkt in int umcasten, einfach static_cast&lt;int&gt;(charvariable) wie man das von anderen Casts kennt. Falls du meinst, eine Zeichenfolge wie &quot;24564&quot; in einen int umzuwandeln, so nimmt man dafür normalerweise stringstreams. Das funktioniert eingentlich genauso wie mit dem cin im Beispielprogramm, jedoch sind die Stringstreams wirklich für solche Umwandlungen da, der Gebrauch von cin dafür ist ein riskanter Missbrauch, der nur unter speziellen Bedingungen funktioniert. Ich vermute derjenige der das Beispielprogramm schrieb wollte an der Stelle einfach noch nicht auf stringstreams eingehen.</p>
<p>Im Prinzip geht das so:</p>
<pre><code class="language-cpp">std::string zahl = &quot;12345&quot; // eine Zeichenfolge die in einen int umgewandelt werden soll.
std::stringstream ss;      // Dazu nehmen wir einen Stringstream
ss &lt;&lt; zahl;                // Schreiben die Zeichenfolge in den Stream...
int my_int;
ss &gt;&gt; my_int;              // ...und lesen sie wieder aus, dieses mal in eine int-Variable. Die Konvertierung übernimmt der Stringstream-Operator &quot;&gt;&gt;&quot;
// my_int hat nun den Wert 12345
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1727908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1727908</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Jun 2009 21:00:18 GMT</pubDate></item></channel></rss>