<?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[Dateinamen aus Schleifenvariable generieren]]></title><description><![CDATA[<p>Ich möchte in einem C-Programm in einer Schleife Dateinamen nach dem Schema (z.B.) q100g035.csv generieren. Dieser Beispieldateiname soll generiert werden, wenn die (float) Variable q den Wert 1 hat und g den Wert 0.35 hat. q und g haben immer nur 2 Nachkommastellen.<br />
Ich verwende die Funktion <code>Filename</code> für diesen Zweck. Letztendlich soll die Funktion dann in der Form <code>f_ptr = fopen (Filename(q,g).c_str(),&quot;r&quot;);</code> verwendet werden.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std; //endl
using std::cout;

void  IntToString(int i, char* buffer)
{
	sprintf(buffer, &quot;%d&quot;, i);
}

std::string Filename(double q, double g)
{
	std::string f1,f3, f5, filename;

	if (q==1) {f1=&quot;q&quot;;} else {f1=&quot;q0&quot;;}
	char lala1[1]; //wenn ich das weglasse, gibt es Fehler.
	char f2[3];
	IntToString(100*q,f2);

	if (g==1) {f3=&quot;g&quot;;} else {f3=&quot;g0&quot;;}
	char lala2[1]; //wenn ich das weglasse, gibt es Fehler.
	char  f4[3];
	IntToString(100*g,f4);

	f5=&quot;.csv&quot;;
	filename=(f1+f2+f3+f4+f5);
	return filename;
}

int main() {
	cout &lt;&lt; Filename(0.85,0.9) &lt;&lt; endl;
	cout &lt;&lt; Filename(1,0.75) &lt;&lt; endl;
	cout &lt;&lt; Filename(0.9,1) &lt;&lt; endl;
}//main
</code></pre>
<p>Wenn ich den Code compiliere (g++) und ausführe, erhalte ich als Ausgabe</p>
<blockquote>
<p>~/code/C++ $ ./test<br />
q084g090.csv<br />
q100g075.csv<br />
q090g100.csv</p>
</blockquote>
<p>Warum steht da 084 anstatt 085? Was mache ich falsch? Vermutlich ist die Funktion sowieso viel zu kompliziert und das geht alles einfacher. Aber wie?</p>
<p>Gruß, Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270476/dateinamen-aus-schleifenvariable-generieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 08:10:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270476.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jul 2010 13:11:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 13:11:46 GMT]]></title><description><![CDATA[<p>Ich möchte in einem C-Programm in einer Schleife Dateinamen nach dem Schema (z.B.) q100g035.csv generieren. Dieser Beispieldateiname soll generiert werden, wenn die (float) Variable q den Wert 1 hat und g den Wert 0.35 hat. q und g haben immer nur 2 Nachkommastellen.<br />
Ich verwende die Funktion <code>Filename</code> für diesen Zweck. Letztendlich soll die Funktion dann in der Form <code>f_ptr = fopen (Filename(q,g).c_str(),&quot;r&quot;);</code> verwendet werden.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std; //endl
using std::cout;

void  IntToString(int i, char* buffer)
{
	sprintf(buffer, &quot;%d&quot;, i);
}

std::string Filename(double q, double g)
{
	std::string f1,f3, f5, filename;

	if (q==1) {f1=&quot;q&quot;;} else {f1=&quot;q0&quot;;}
	char lala1[1]; //wenn ich das weglasse, gibt es Fehler.
	char f2[3];
	IntToString(100*q,f2);

	if (g==1) {f3=&quot;g&quot;;} else {f3=&quot;g0&quot;;}
	char lala2[1]; //wenn ich das weglasse, gibt es Fehler.
	char  f4[3];
	IntToString(100*g,f4);

	f5=&quot;.csv&quot;;
	filename=(f1+f2+f3+f4+f5);
	return filename;
}

int main() {
	cout &lt;&lt; Filename(0.85,0.9) &lt;&lt; endl;
	cout &lt;&lt; Filename(1,0.75) &lt;&lt; endl;
	cout &lt;&lt; Filename(0.9,1) &lt;&lt; endl;
}//main
</code></pre>
<p>Wenn ich den Code compiliere (g++) und ausführe, erhalte ich als Ausgabe</p>
<blockquote>
<p>~/code/C++ $ ./test<br />
q084g090.csv<br />
q100g075.csv<br />
q090g100.csv</p>
</blockquote>
<p>Warum steht da 084 anstatt 085? Was mache ich falsch? Vermutlich ist die Funktion sowieso viel zu kompliziert und das geht alles einfacher. Aber wie?</p>
<p>Gruß, Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925586</guid><dc:creator><![CDATA[xammm]]></dc:creator><pubDate>Tue, 13 Jul 2010 13:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 13:42:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<blockquote>
<p>char lala1[1]; //wenn ich das weglasse, gibt es Fehler.</p>
</blockquote>
<p>Weil Du da:</p>
<blockquote>
<p>char f2[3];</p>
</blockquote>
<p>den Platz für das 0-Byte vergessen hast.</p>
<pre><code class="language-cpp">char f2[4];  // 3 Ziffern + null byte
</code></pre>
<blockquote>
<p>Warum steht da 084 anstatt 085</p>
</blockquote>
<p>Das sind Rundungsfehler weil doubles nicht mit dem Deszimalsystem sondern mit den Dualsystem arbeiten. Schreibe also statt:</p>
<blockquote>
<p>IntToString(100*q,f2);</p>
</blockquote>
<pre><code class="language-cpp">IntToString(100.0*q+0.5,f2);
</code></pre>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925605</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Tue, 13 Jul 2010 13:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 13:44:35 GMT]]></title><description><![CDATA[<p>Machst du C oder C++? In C++ kannst du das wesentlich einfacher machen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
#include &lt;cassert&gt;

using namespace std; 

string Filename(double q, double g)
{
  assert(q&gt;0);   // Da ich nicht weiß, was du bei negativen Zahlen machen willst
  assert(g&gt;0);   // mache ich hier mal provisorisch ein assert hin

  stringstream filename;
  filename&lt;&lt;'q'
          &lt;&lt; setw(3)&lt;&lt; setfill('0') &lt;&lt; int(q*100+0.5) // Simples runden positiver Zahlen
          &lt;&lt;'g'
          &lt;&lt; setw(3)&lt;&lt; setfill('0') &lt;&lt; int(g*100+0.5)
          &lt;&lt;&quot;.csv&quot;; 

  return filename.str();
}

int main() {
    cout &lt;&lt; Filename(0.85,0.9) &lt;&lt; endl;
    cout &lt;&lt; Filename(1,0.75) &lt;&lt; endl;
    cout &lt;&lt; Filename(0.9,1) &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1925607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925607</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 13 Jul 2010 13:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 13:48:56 GMT]]></title><description><![CDATA[<p>xammm schrieb:</p>
<blockquote>
<p>Vermutlich ist die Funktion sowieso viel zu kompliziert und das geht alles einfacher. Aber wie?</p>
<p>Gruß, Max</p>
</blockquote>
<p>Stimmt einfacher wäre z.B. sowas:</p>
<pre><code class="language-cpp">char filename[16];
sprintf( filename, &quot;q%03dg%03d.csv&quot;, (int)(q*100.0+0,5), (int)(g*100.0+0,5) );
</code></pre>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925613</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Tue, 13 Jul 2010 13:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 13:54:01 GMT]]></title><description><![CDATA[<p>mgaeckler schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char filename[16];
sprintf( filename, &quot;q%03dg%03d.csv&quot;, (int)(q*100.0+0,5), (int)(g*100.0+0,5) );
</code></pre>
</blockquote>
<p>Manchmal bin ich von der schlichten Eleganz von C fasziniert. Ich ziehe die Bemerkungzurück, dass die C++-Lösung einfacher wäre. Wobei man aber noch darauf hinweisen sollte, dass der Threadersteller ziemlich wahrscheinlich doch C++ macht. Zum Glück kann er dort ja auch die C-Lösung verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925617</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 13 Jul 2010 13:54:01 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 14:20:41 GMT]]></title><description><![CDATA[<p>Danke an euch alle. Ich hab die Lösung von Martin eben implementiert und es funktioniert super. Muss noch viel lernen...</p>
<p>Grüße, Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925631</guid><dc:creator><![CDATA[xammm]]></dc:creator><pubDate>Tue, 13 Jul 2010 14:20:41 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 14:32:03 GMT]]></title><description><![CDATA[<p>evtl. könnte man die buffer größe an sowas wie FILENAME_MAX binden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>@edit es gibt auch noch andere <a href="http://www.delorie.com/gnu/docs/glibc/libc_652.html" rel="nofollow">makros</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925636</guid><dc:creator><![CDATA[no_code]]></dc:creator><pubDate>Tue, 13 Jul 2010 14:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Dateinamen aus Schleifenvariable generieren on Tue, 13 Jul 2010 15:10:15 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-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</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/1925664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925664</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Tue, 13 Jul 2010 15:10:15 GMT</pubDate></item></channel></rss>