<?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[Shell&#x2F;Konsole schreiben]]></title><description><![CDATA[<p>Ich möchte ein Programm schreiben, in dem nach dem Starten zunächst nur ein Prompt in der Konsole erscheint.<br />
Das Programm soll verschiedene vom Benutzer eingegebene Kommandos/Befehle verarbeiten können (d.h. die entsprechenden Funktionen<br />
aufrufen.<br />
Z.B.:</p>
<pre><code>setVar(1,0)
</code></pre>
<p>In Klammer soll der Benutzer verschieden Parameter angeben können.<br />
Wie kann man sowas am Besten realisieren. Ich hab schon von Möglichkeiten mit einer Shell oder eine Konsolenprogrammierung gehört.<br />
Sind das sinnvolle Ansätze??<br />
Kennt jemand eine Link wo man sich in dieses Thema hineinarbeiten kann?<br />
Ich bin für jede Antwort dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285333/shell-konsole-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 04:01:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285333.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Apr 2011 14:08:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Mon, 18 Apr 2011 14:08:28 GMT]]></title><description><![CDATA[<p>Ich möchte ein Programm schreiben, in dem nach dem Starten zunächst nur ein Prompt in der Konsole erscheint.<br />
Das Programm soll verschiedene vom Benutzer eingegebene Kommandos/Befehle verarbeiten können (d.h. die entsprechenden Funktionen<br />
aufrufen.<br />
Z.B.:</p>
<pre><code>setVar(1,0)
</code></pre>
<p>In Klammer soll der Benutzer verschieden Parameter angeben können.<br />
Wie kann man sowas am Besten realisieren. Ich hab schon von Möglichkeiten mit einer Shell oder eine Konsolenprogrammierung gehört.<br />
Sind das sinnvolle Ansätze??<br />
Kennt jemand eine Link wo man sich in dieses Thema hineinarbeiten kann?<br />
Ich bin für jede Antwort dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051142</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Mon, 18 Apr 2011 14:08:28 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Mon, 18 Apr 2011 14:23:23 GMT]]></title><description><![CDATA[<p><a href="http://lmgtfy.com/?q=c%2B%2B+console+input" rel="nofollow">http://lmgtfy.com/?q=c%2B%2B+console+input</a></p>
<p>Grüße,<br />
Rewind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051150</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 18 Apr 2011 14:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Mon, 18 Apr 2011 15:08:51 GMT]]></title><description><![CDATA[<p>Danke für die Antwort<br />
Ich habe dabei z.B an sowas gedacht:<br />
<a href="http://www.codeworx.org/cpp_tuts_1_7.php" rel="nofollow">http://www.codeworx.org/cpp_tuts_1_7.php</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051192</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Mon, 18 Apr 2011 15:08:51 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Mon, 18 Apr 2011 15:12:48 GMT]]></title><description><![CDATA[<p>Also wenn ich das richtig verstanden habe, ist es eigentlich ganz einfach.<br />
Du erstellst eine C++ Konsolenanwendung. Nach dem starten, wartest du dann eben in einer Schleife auf Benutzereingaben( z.B: mit cin &gt;&gt; myString oder mit getline( cin, myString ) ) und parst diese dann und verarbeitest sie entsprechend.</p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051195</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Mon, 18 Apr 2011 15:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Mon, 18 Apr 2011 16:48:44 GMT]]></title><description><![CDATA[<p>hallo123 schrieb:</p>
<blockquote>
<p>Danke für die Antwort<br />
Ich habe dabei z.B an sowas gedacht:<br />
<a href="http://www.codeworx.org/cpp_tuts_1_7.php" rel="nofollow">http://www.codeworx.org/cpp_tuts_1_7.php</a></p>
</blockquote>
<p>Warum so kompliziert, wenn es viel einfacher geht? Oder willst du von Berlin nach Kiel über München? Ich weiß nicht wie deine weiteren Schritte aussehen sollen, aber für die erläuterten brauchst bestimmt keine Shells. Mach's doch einfach so wie fr33g das vorgeschlagen hat.</p>
<p>Grüße,<br />
Rewind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051243</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 18 Apr 2011 16:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 08:33:52 GMT]]></title><description><![CDATA[<p>Ja das stimmt schon, aber es sollte hald möglich sein, die neuen Befehle schnell einzufügen, da es um die 50 Befehle sind. Außerdem können ständig neue Befehle hinzugefügt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051495</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Tue, 19 Apr 2011 08:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 08:57:29 GMT]]></title><description><![CDATA[<p>Ja, dann bau Dir halt nen Container mit Befehlen mit Anzahl der Parameter, bau Dir nen gleichen Tokenizer und daraufhin nen Parser und dann läuft das.</p>
<p>Oder wenn Du nur einen Befehl pro Zeile brauchst, ist das Parsen ja noch einfacher. Dann nimmst du irgendwas von boost mit regex oder ein paar weiteren Stringfunktionen oder du machst das klassisch.</p>
<p>Wenn Du hinter jedem Befehl eine Funktion haben möchtest, brauchst Du natürlich entsprechend viele Implementierungen. Anbieten könnte sich z.B. eine map mit Funktionszeigern. Aber dafür stellt sich die Frage, ob die Parameter und Rückgabetypen der Funktionen gleich sind oder nicht. Was sollen das denn für Funktionen sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051505</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 08:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 09:08:24 GMT]]></title><description><![CDATA[<p>ja es sollte hinter jedem befehl eine funktion stehen.<br />
was dann in diesen funktionen gemacht wird ist ja prinzipiell egal. was mir allerdings wichtig ist, ist das programm z.b erkennt ob die richtigen paramter eingegeben wurden, ob die parameter den richtigen typ haben und ob sie im richtigen bereich liegen.<br />
es wäre hald schön wenn man diese überprüfung nicht für jeden befehl einzeln eingeben muss. ich hoffe das war jetzt verständlich ausgedrückt. Danke im voraus für eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051511</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Tue, 19 Apr 2011 09:08:24 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 09:32:52 GMT]]></title><description><![CDATA[<p>Wenn du das automatisieren willst, wird das aber nicht so einfach mit der Parameterüberprüfung. Das ist ein ziemliches Gefrickel. Wenn Du wüsstest, dass die Parameter einfach immer double sein könnten und der Rückgabetyp void ist, könnte ich was basteln. <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/2051526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051526</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 09:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 10:01:27 GMT]]></title><description><![CDATA[<p>wenn ichs richtig sehe bestimmt das erste Wort, welche Funktion aufgerufen wird. Gib dann einfach den Rest der Zeile als einen String an die jeweilige Funktion weiter, die soll dann selbst entscheiden, ob die Parameter passen. Die Implementierung wird dadurch auch einfacher, da du dann alle Funktionen die selbe Signatur haben und du nurnoch anhand des ersten Wortes die richtige Funktion aus einer map&lt;string, void (*)(string const&amp;)&gt; heraussuchen kannst.</p>
<p>Die Überprüfung der Parameter kannst du dir ggf. mit einem kleinen Framework erleichtern, das dir aus den parameter-strings die richtigen Parameter rauspult und bei Misserfolg einen Fehler ausgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051537</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 19 Apr 2011 10:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 10:02:21 GMT]]></title><description><![CDATA[<p>Ja, der Rückgabetyp der Funktion ist immer void. Wenn es mit den Paramtertyp double geht wär das ja schon mal ein Anfang.<br />
Das ließe sich dann später ja vielleicht einmal erweitern.<br />
Ich bin im moment echt ziemlich verzweifelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051539</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Tue, 19 Apr 2011 10:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 10:33:52 GMT]]></title><description><![CDATA[<p>Wie gesagt, übergib die Parameter als string an die Funktionen und parse bei Bedarf in der jeweiligen Funktion deinen double daraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051557</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 19 Apr 2011 10:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 12:21:53 GMT]]></title><description><![CDATA[<p>Vor 2 Jahren wurde so was ähnliches schon einmal durchdiskutiert.<br />
Was haltet ihr von dieser möglichkeit?</p>
<blockquote>
<p>Och, so schwer ist das gar nicht. Du solltest halt nicht damit anfangen, die beste Konsole/Shell der Welt zu schreiben, sondern eher in kleinen und schnellen Schritten vorwärts.</p>
<p>Ich geb dir mal ne Struktur vor <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    />:<br />
1. Grundgerüst, also einfache Schleife, vor jeder Eingabe wird &quot;&gt; &quot; (oder so) ausgegeben und du kannst Befehle einlesen (mit std::getline), ohne Parsing oder weitere Verarbeitung.</p>
<p>2. Du implementierst super-einfache Befehle, z.B. &quot;hallo&quot; und &quot;exit&quot;, wobei bei &quot;hallo&quot; auch irgendeine Begrüßung kommt, bei exit wird die Schleife und damit das Programm verlassen.</p>
<p>3. Du überlegst dir eine gute Struktur, die Befehle zu verarbeiten (if (str==&quot;hallo&quot;) {...} else if (str==&quot;exit&quot;) {...} wäre z.B. nicht gut). Evtl bietet sich hier eine map an, die Strings nach Funktionszeigern mappt. Dann kannst du mit if ( mymap.find(input) != mymap.end() ) rausfinden, ob der Befehl existiert und mit mymap[input](); die Funktion aufrufen, die dann den Befehl ausführt (also für jeden Befehl eine Funktion).</p>
<p>4. Argumente für die Befehle parsen, also bis Klammer ist der Befehl, danach bis zur hinteren Klammer die Texte zwischen den Kommata extrahieren. Die Texte bzw Parameter in vector&lt;string&gt; oder so speichern und der entsprechenden Befehlsfunktion mit übergeben. Die wertet die Parameter dann aus, also wandelt sie in entsprechend be-typ-te Variablen um und agiert dann je nach Parametern.</p>
<p>Oder so</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2051616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051616</guid><dc:creator><![CDATA[cuba1]]></dc:creator><pubDate>Tue, 19 Apr 2011 12:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 12:52:18 GMT]]></title><description><![CDATA[<p>Ja, so was habe ich hier Mal gebastelt, habe aber das Parsen weggelassen, weil ich da gerade noch keine super-schöne Lösung gefunden habe:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;map&gt;

class Command
{
private:
	void*			funcPtr_;
	unsigned int	arguments_;

public:
	Command(void* funcPtr, unsigned int arguments)
		: funcPtr_(funcPtr), arguments_(arguments) {}

	void operator()(const std::string&amp; argumentString)
	{
		std::vector&lt;double&gt; argumentList;
		// Nach eigenem Bedarf argumentString nach Argumenten parsen

                std::assert(argumentList.size() == arguments_);

		switch(argumentList.size())
		{
		case 0: (*reinterpret_cast&lt;void(*)()&gt;(funcPtr_))(); break;
		case 1: (*reinterpret_cast&lt;void(*)(double)&gt;(funcPtr_))(argumentList[0]); break;
		case 2: (*reinterpret_cast&lt;void(*)(double, double)&gt;(funcPtr_))(argumentList[0], argumentList[1]); break;
		}
	}
};

void sleep(double seconds) {/* ... */}
void punch(double lowPunchs, double highPunchs) {/* ... */}

int main()
{
	std::map&lt;std::string, Command&gt; CommandMap;

	CommandMap.insert(std::pair&lt;std::string, Command&gt;(&quot;sleep&quot;, Command(&amp;sleep, 1)));
	CommandMap.insert(std::pair&lt;std::string, Command&gt;(&quot;punch&quot;, Command(&amp;punch, 2)));

	std::string blub;

	while(std::getline(std::cin, blub))
	{
		std::string command;
		std::string argumentPart;
		// Von blub den Teil vor der Klammer und zwischen den Klammern parsen
		CommandMap[command](argumentPart);
	}

	int u;
	std::cin &gt;&gt; u;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2051630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051630</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 12:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 13:08:33 GMT]]></title><description><![CDATA[<p>Für den Anfang und mit 50 Befeheln reicht doch auch etwas ganz leichtes, sowas zb:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;cstdlib&gt; //für exit

void help()
{
    std::cout &lt;&lt; &quot;Auflistung aller Befehle:\n&quot;;
    //...
}

void exit()
{
    exit(0);
}

int main(int argc, char **argv)
{
    std::map&lt;std::string, void (*)()&gt; befehl_normal;
    befehl_normal[&quot;help&quot;] = &amp;help;
    befehl_normal[&quot;exit&quot;] = &amp;exit;

    std::string eingabe;

    for(;;)
    {
        std::cout &lt;&lt; argv[0] &lt;&lt; &quot; &gt;&gt; &quot;;
        std::getline(std::cin, eingabe);

        if(befehl_normal.find(eingabe) != befehl_normal.end()) //ist der befehl vorhanden?
        {
            befehl_normal[eingabe](); //wenn ja, fuer aus
        }

        else
        {
            std::cerr &lt;&lt; &quot;Der Befehl \&quot;&quot; &lt;&lt; eingabe &lt;&lt; &quot;\&quot; ist entweder falsch geschrieben\n&quot;
                         &quot;oder ist nicht vorhanden.\n&quot;;
        }
    }
}
</code></pre>
<p>Und das könnte man für den Anfang noch weiter ausbauen. Für 50 Befehle reicht das, und wenn das Prog nur die Konsole sein soll braucht es auch nicht mehr, finde ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051642</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 13:11:20 GMT]]></title><description><![CDATA[<p>Er wollte aber Parameter haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051644</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:11:20 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 13:48:22 GMT]]></title><description><![CDATA[<p>Gibt es da eigentlich auch eine Möglichkeit mit Templates? Mir fällt da nichts ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051666</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 13:53:13 GMT]]></title><description><![CDATA[<p>Wie, mit Templates? Ein Klassentemplate kann man nicht als Typ einer Map/eines Vectors nehmen oder was willst Du templatisieren? Oder mit diesen neuen variablen Argumenten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051672</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 14:09:16 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Ein Klassentemplate kann man nicht als Typ einer Map/eines Vectors nehmen</p>
</blockquote>
<p>Wie meinst du das? Das versteh ich nicht. Meinst du sowas</p>
<p><code>std::vector&lt;TemplateKlasse&lt;Typ&gt;&gt; array</code></p>
<p>? Und wiese geht das eigentlich nicht ohne Typ, sodass man dann sowas hat:</p>
<pre><code>std::vector&lt;TemplateKlasse&gt; array;
array.push_back(TemplateKlasse&lt;int&gt;); //hier ein objekt mit typ int hinzufügen
array.push_back(TemplateKlasse&lt;char&gt;); //hier mit char
</code></pre>
<p>Kann man das irgendwie erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051680</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Tue, 19 Apr 2011 14:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Tue, 19 Apr 2011 14:23:06 GMT]]></title><description><![CDATA[<p>Vorsicht, Du meinst mit Templateklasse gerade Klassentemplate. <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>Das geht nicht, weil das unterschiedliche Typen sind. Du kannst eine abstrakte Klasse in einen Container stecken, aber das Klassentemplate ist ja kein Typ, bevor es nicht typisiert ist.</p>
<p>Man kann das erreichen, indem man noch Vererbung dazu bastelt...</p>
<pre><code class="language-cpp">class HiIAmRandy
{
public:
virtual callMethode(std::string&amp;) = 0;
};

template&lt;class T&gt;
class IKilledYouInThePastSeveralTimes : public HiIAmRandy
{
public:
virtual callMethode(std::string&amp;) {/* Parsen und methode aufrufen */}
void methode(T bla) {}
};

std::vector&lt;HiIAmRandy*&gt; einVectorEinVectorHurra;
</code></pre>
<p>Na ja, aber das nützt nichts. Wenn ich nämlich von diesem Objekt was in den vector schreibe, geht der Funktionspointer logischerweise auch nicht auf ein Funktionstemplate, sondern nur auf eine Templatefunktion und damit bringt mir die Flexibilität durch das Template wieder nichts, weil ich für jeden Typ was in die map schieben muss... Vielleicht ist das einer der seltenen Fälle, wo boost::any Sinn machen würde. Aber double deckt eh fast alles ab, also wird das wohl reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051682</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 19 Apr 2011 14:23:06 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Thu, 28 Apr 2011 11:00:13 GMT]]></title><description><![CDATA[<p>Ich habe mittlerweile begonnen die konsole zu schreiben.<br />
Die Eingabe durch den Benutzer erfolgt nun durch folgendes Muster:</p>
<pre><code>befehlsname par1 par2 par3
</code></pre>
<p>Das Parsen der Eingabe hab ich folgendermaßen realisiert:</p>
<pre><code>int main( int argc, char * argv[] )
{

	while(1)
	{
	parse( argc, argv );
	}
}

void parse(int argc, const char * const * argv)
{
		vector&lt;string&gt; args;
		for (int i = 0; i &lt; argc; i++)
			args.push_back(argv[i]);
}
</code></pre>
<p>Die strings werden anschließen in die entsprechenden Variablentypen umgewandelt.</p>
<p>Nun wäre es noch schön, in der Konsole zusätzlich eine &quot;history&quot; (mit pfeiltaste oben) und eine &quot;autovervollständigung&quot; (tabulator) einzurichten.<br />
Hat jemand eine Idee wie man das machen könnte?<br />
Gibt es dazu für Linux Bibliotheken die einem sowas erleichtern?<br />
Danke für alle die sich Zeit nehmen dies durchzulesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2055501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2055501</guid><dc:creator><![CDATA[hallo 123]]></dc:creator><pubDate>Thu, 28 Apr 2011 11:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Thu, 28 Apr 2011 11:03:35 GMT]]></title><description><![CDATA[<p>hallo 123 schrieb:</p>
<blockquote>
<p>Nun wäre es noch schön, in der Konsole zusätzlich eine &quot;history&quot; (mit pfeiltaste oben) und eine &quot;autovervollständigung&quot; (tabulator) einzurichten.<br />
Hat jemand eine Idee wie man das machen könnte?</p>
</blockquote>
<p>Nicht mit Standard-C++ Bordmitteln. Das kennt nämlich keine Pfeiltaste und Tabulatortaste - und in der Konsole den Befehl zu verfollständigen klappt auch nur mit OS-Spezifischen Konsole-Funktionen.<br />
Daher stell deine Frage am besten im jeweiligen OS-Unterforum in einem neuen Thread <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2055505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2055505</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 28 Apr 2011 11:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Thu, 28 Apr 2011 11:05:36 GMT]]></title><description><![CDATA[<p>hallo 123 schrieb:</p>
<blockquote>
<pre><code>void parse(int argc, const char * const * argv)
{
		vector&lt;string&gt; args;
		for (int i = 0; i &lt; argc; i++)
			args.push_back(argv[i]);
}
</code></pre>
</blockquote>
<p>WArum nicht einfach per</p>
<pre><code class="language-cpp">vector&lt;string&gt; args(argv,argv+argc);
</code></pre>
<blockquote>
<p>Nun wäre es noch schön, in der Konsole zusätzlich eine &quot;history&quot; (mit pfeiltaste oben) und eine &quot;autovervollständigung&quot; (tabulator) einzurichten.<br />
Hat jemand eine Idee wie man das machen könnte?<br />
Gibt es dazu für Linux Bibliotheken die einem sowas erleichtern?<br />
Danke für alle die sich Zeit nehmen dies durchzulesen.</p>
</blockquote>
<p>Da mußt du die Tasten in deinem Programm abfangen (das geht nicht mit C++ Bordmitteln, aber mit Funktionen deines Systems) und darauf reagieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2055506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2055506</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 28 Apr 2011 11:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Shell&#x2F;Konsole schreiben on Thu, 28 Apr 2011 11:12:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Daher stell deine Frage am besten im jeweiligen OS-Unterforum in einem neuen Thread <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>
</blockquote>
<p>Danke, das werd ich gleich machen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2055510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2055510</guid><dc:creator><![CDATA[hallo123]]></dc:creator><pubDate>Thu, 28 Apr 2011 11:12:43 GMT</pubDate></item></channel></rss>