<?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[fscanf Frage]]></title><description><![CDATA[<p>Nehmen wir an, das ist der Inhalt einer Datei:</p>
<pre><code>M 1.0 0.0 0.0 1.0 1.0 [b]\n[/b]
M 1.0 0.0 1.0 0.0 0.0 [b]\n[/b]
[b]V[/b] -0.5 -1.0 -0.5 0.5 1.5 2.0 0.0 0.0[b]EOF[/B]
</code></pre>
<p>Ein 'Datensatz' besteht also aus einem char und 5 float Zahlen.</p>
<p>Mit diesem Stueckchen Code:</p>
<pre><code class="language-cpp">struct Material{
float diffA, diffR, diffG, diffB, pow;
};

Liste &lt;Material&gt; mat;

char dataType;
unsigned i=0,j=0;

do{
j=fscanf(shapeFile, &quot;%c%f%f%%f%f%f&quot;, &amp;dataType, &amp;mat[i].diffA,
  &amp;mat[i].diffR, &amp;mat[i].diffG, &amp;mat[i].diffB, &amp;mat[i].pow);
i++;
}while(dataType=='M' &amp;&amp; j==6);
</code></pre>
<p>hätte ich mir jetzt erhofft, solange die Float-Zahlen in die float Variablen des struct Material hineinschreiben zu können, bis irgendwann einmal der 'Kennbuchstabe' für den Datentyp ungleich 'M' ist.</p>
<p>Jetzt gibt's eine Unsicherheit sowie ein Problem damit.<br />
Erstens bin ich mir nicht sicher, ob fscanf womöglich das '\n' aus der Datei einfach als 'char' Wert hernimmt und in die Variable dataType schreiben könnte. Das ist die Unsicherheit.</p>
<p>Das Problem ist, dass, falls der Kennbuchstabe für den durch die Floats bezeichneten Datentyp sich verändert hat (beispielsweise 'V' für Vertex),<br />
möglicherweise totaler Unsinn in einer Material-Struktur drinnen steht (weil die Vertex-Floats als Material-Floats interpretiert wurden).<br />
Wahrscheinlich ist das Schleifenkonstrukt nicht besonders geschickt, wenn jemandem eine geeignetere Schleife für das Einlesen einfällt, wäre dankbar für einen kurzen Code-Vorschlag!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172057/fscanf-frage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 16:38:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172057.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Jan 2007 21:03:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fscanf Frage on Wed, 31 Jan 2007 21:03:05 GMT]]></title><description><![CDATA[<p>Nehmen wir an, das ist der Inhalt einer Datei:</p>
<pre><code>M 1.0 0.0 0.0 1.0 1.0 [b]\n[/b]
M 1.0 0.0 1.0 0.0 0.0 [b]\n[/b]
[b]V[/b] -0.5 -1.0 -0.5 0.5 1.5 2.0 0.0 0.0[b]EOF[/B]
</code></pre>
<p>Ein 'Datensatz' besteht also aus einem char und 5 float Zahlen.</p>
<p>Mit diesem Stueckchen Code:</p>
<pre><code class="language-cpp">struct Material{
float diffA, diffR, diffG, diffB, pow;
};

Liste &lt;Material&gt; mat;

char dataType;
unsigned i=0,j=0;

do{
j=fscanf(shapeFile, &quot;%c%f%f%%f%f%f&quot;, &amp;dataType, &amp;mat[i].diffA,
  &amp;mat[i].diffR, &amp;mat[i].diffG, &amp;mat[i].diffB, &amp;mat[i].pow);
i++;
}while(dataType=='M' &amp;&amp; j==6);
</code></pre>
<p>hätte ich mir jetzt erhofft, solange die Float-Zahlen in die float Variablen des struct Material hineinschreiben zu können, bis irgendwann einmal der 'Kennbuchstabe' für den Datentyp ungleich 'M' ist.</p>
<p>Jetzt gibt's eine Unsicherheit sowie ein Problem damit.<br />
Erstens bin ich mir nicht sicher, ob fscanf womöglich das '\n' aus der Datei einfach als 'char' Wert hernimmt und in die Variable dataType schreiben könnte. Das ist die Unsicherheit.</p>
<p>Das Problem ist, dass, falls der Kennbuchstabe für den durch die Floats bezeichneten Datentyp sich verändert hat (beispielsweise 'V' für Vertex),<br />
möglicherweise totaler Unsinn in einer Material-Struktur drinnen steht (weil die Vertex-Floats als Material-Floats interpretiert wurden).<br />
Wahrscheinlich ist das Schleifenkonstrukt nicht besonders geschickt, wenn jemandem eine geeignetere Schleife für das Einlesen einfällt, wäre dankbar für einen kurzen Code-Vorschlag!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220799</guid><dc:creator><![CDATA[Eigenbroetler3]]></dc:creator><pubDate>Wed, 31 Jan 2007 21:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to fscanf Frage on Thu, 01 Feb 2007 07:06:24 GMT]]></title><description><![CDATA[<p>Normalerweise überliest scanf() alle Whitespaces, die in der Eingabe vorkommen (inklusive Zeilenwechsel). Aber wenn du auf Nummer sicher gehen willst, kannst du in der Schleife den Rest der Zeile überlesen per <code>while(fgetc(shapeFile)!='\n'&amp;&amp;!feof(shapeFile));</code> .</p>
<p>PS: Übrigens gehört fscanf() eine Etage höher - in C++ verwendet man fstreams für die Eingabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220882</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 01 Feb 2007 07:06:24 GMT</pubDate></item></channel></rss>