<?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[Falscheingaben für float und double abfangen in c]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wie auch ich fragen sich sicherlich viele andere Programmieranfänger wie man Falscheingaben nicht nur von int (isdigit()) sondern auch von float und double-eingaben in c abfangen kann. Nach ewigem Forengesurfe, Büchergewälze usw. hab ich herausgefunden das dies in C wohl nur mit Strings kompfortabel funktioniert und mal nen bisle Gehirnschmalz investiert. Das Ergebnis ist eine Funktion die elementweise den String auf Falscheingaben(zugelassen sind nur Vorzeichen, ein Punkt und Zahlen) prüft und solange läuft bis ein gültiger Wert eingegeben wurde. Ich habe so gut es geht versucht die Fehlerauswertung korrekt zu gestalten, die is noch ein bisle hakelig, aber das beeinträchtigt nicht die eigentliche Funktionalität. Zuletzt wird der gültige String mit atof in float oder double, je nach Bedarf umgewandelt und ausgegeben.</p>
<p>Bin immer gerne offen für Fragen/Verbesserungsvorschläge, vielleicht geht das ganze ja auch einfacher, ich hab aber keine vergleichbare Funktion wie isdigit für int, für float und double gefunden (hab in MS VS 6, Konsole geschrieben).</p>
<p>Hier wie gesagt eine Möglichkeit:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

void main()
{
	char input[500];
	bool pruef=false;
	int i=0, j=0, k=0, x=0,y=0, z=0;
	float intin;
	do
	{
		system(&quot;cls&quot;);
		printf(&quot;\n\n\n\tBitte Wert eingeben: &quot;);
		gets(input);
		k=strlen(input);
		x=0; y=0; z=0;
		for(i=0;i&lt;=k;i++)
		{
			printf(&quot;\nWert %i.Element: %c\n&quot;,i,input[i]);

			if(input[i]=='0'||input[i]=='1'||input[i]=='2'||input[i]=='3'||input[i]=='4'||input[i]=='5'||input[i]=='6'||input[i]=='7'||input[i]=='8'||input[i]=='9')
			{
				printf(&quot;\n\tOK! (Zahl)\n&quot;);
				pruef=true;
			}
			else
			{
				if(input[i]=='.'&amp;&amp;!(input[0]=='.'))
				{
					if(!(x&gt;0))
					{
						printf(&quot;\n\tOK! (Punkt)\n&quot;);
						pruef=true; //nur zur Verdeutlichung des Sachverhaltes
					}
					else
					{
						printf(&quot;\n\tNICHT OK! (Mehr als ein Punkt)&quot;);
						pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					}
					x++;
				}
				else if(input[i]=='+'||input[i]=='-')
				{
					for(j=1;j&lt;=k;j++)
					{
						if(input[j]=='+'||input[j]=='-')
						{
							y++;
						}
					}
					if((!(y&gt;0))&amp;&amp;(!(input[1]=='.')))
					{
						printf(&quot;\n\tOK! (Vorzeichen)\n&quot;);
						pruef=true; //nur zur Verdeutlichung des Sachverhaltes
					}
					else
					{
						printf(&quot;\n\tNICHT OK! (Vorzeichen nicht im 1.Element/Punkt nach Vorzeichen)\n&quot;);
						pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					}
				}
				else if(input[i]=='\0'&amp;&amp;!(input[0]=='\0'))
				{
					printf(&quot;\n\tOK! (Stringende)\n&quot;);
					pruef=true; //nur zur Verdeutlichung des Sachverhaltes
				}
				else
				{
					printf(&quot;\n\tNICHT OK (Anderes Zeichen oder Punkt im 1. Element)\n&quot;);
					pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					z++;
				}
			}
		}
		system(&quot;pause&quot;);
		if(x&gt;1||y&gt;0||z&gt;0||input[0]=='.')				//hier eigentliche Bedingungsprüfung für Schleifenende (pruef)
		{
			pruef=false;
		}
		else if((input[0]=='+'||input[0]=='-')&amp;&amp;(input[1]=='.'))
		{
			pruef=false;
		}
		else
		{
			pruef=true;
			system(&quot;cls&quot;);
			intin=atof(input);
			printf(&quot;\n\n\n\n\n\t\t\tALLES OK\n\n\n\t\t\tFloatwert: %f\n\n\n&quot;,intin);
		}
	}while(pruef==false);
}
</code></pre>
<p>MFG aus Berlin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181743/falscheingaben-für-float-und-double-abfangen-in-c</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 10:10:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181743.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 May 2007 18:31:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Falscheingaben für float und double abfangen in c on Wed, 16 May 2007 18:31:47 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wie auch ich fragen sich sicherlich viele andere Programmieranfänger wie man Falscheingaben nicht nur von int (isdigit()) sondern auch von float und double-eingaben in c abfangen kann. Nach ewigem Forengesurfe, Büchergewälze usw. hab ich herausgefunden das dies in C wohl nur mit Strings kompfortabel funktioniert und mal nen bisle Gehirnschmalz investiert. Das Ergebnis ist eine Funktion die elementweise den String auf Falscheingaben(zugelassen sind nur Vorzeichen, ein Punkt und Zahlen) prüft und solange läuft bis ein gültiger Wert eingegeben wurde. Ich habe so gut es geht versucht die Fehlerauswertung korrekt zu gestalten, die is noch ein bisle hakelig, aber das beeinträchtigt nicht die eigentliche Funktionalität. Zuletzt wird der gültige String mit atof in float oder double, je nach Bedarf umgewandelt und ausgegeben.</p>
<p>Bin immer gerne offen für Fragen/Verbesserungsvorschläge, vielleicht geht das ganze ja auch einfacher, ich hab aber keine vergleichbare Funktion wie isdigit für int, für float und double gefunden (hab in MS VS 6, Konsole geschrieben).</p>
<p>Hier wie gesagt eine Möglichkeit:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

void main()
{
	char input[500];
	bool pruef=false;
	int i=0, j=0, k=0, x=0,y=0, z=0;
	float intin;
	do
	{
		system(&quot;cls&quot;);
		printf(&quot;\n\n\n\tBitte Wert eingeben: &quot;);
		gets(input);
		k=strlen(input);
		x=0; y=0; z=0;
		for(i=0;i&lt;=k;i++)
		{
			printf(&quot;\nWert %i.Element: %c\n&quot;,i,input[i]);

			if(input[i]=='0'||input[i]=='1'||input[i]=='2'||input[i]=='3'||input[i]=='4'||input[i]=='5'||input[i]=='6'||input[i]=='7'||input[i]=='8'||input[i]=='9')
			{
				printf(&quot;\n\tOK! (Zahl)\n&quot;);
				pruef=true;
			}
			else
			{
				if(input[i]=='.'&amp;&amp;!(input[0]=='.'))
				{
					if(!(x&gt;0))
					{
						printf(&quot;\n\tOK! (Punkt)\n&quot;);
						pruef=true; //nur zur Verdeutlichung des Sachverhaltes
					}
					else
					{
						printf(&quot;\n\tNICHT OK! (Mehr als ein Punkt)&quot;);
						pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					}
					x++;
				}
				else if(input[i]=='+'||input[i]=='-')
				{
					for(j=1;j&lt;=k;j++)
					{
						if(input[j]=='+'||input[j]=='-')
						{
							y++;
						}
					}
					if((!(y&gt;0))&amp;&amp;(!(input[1]=='.')))
					{
						printf(&quot;\n\tOK! (Vorzeichen)\n&quot;);
						pruef=true; //nur zur Verdeutlichung des Sachverhaltes
					}
					else
					{
						printf(&quot;\n\tNICHT OK! (Vorzeichen nicht im 1.Element/Punkt nach Vorzeichen)\n&quot;);
						pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					}
				}
				else if(input[i]=='\0'&amp;&amp;!(input[0]=='\0'))
				{
					printf(&quot;\n\tOK! (Stringende)\n&quot;);
					pruef=true; //nur zur Verdeutlichung des Sachverhaltes
				}
				else
				{
					printf(&quot;\n\tNICHT OK (Anderes Zeichen oder Punkt im 1. Element)\n&quot;);
					pruef=false; //nur zur Verdeutlichung des Sachverhaltes
					z++;
				}
			}
		}
		system(&quot;pause&quot;);
		if(x&gt;1||y&gt;0||z&gt;0||input[0]=='.')				//hier eigentliche Bedingungsprüfung für Schleifenende (pruef)
		{
			pruef=false;
		}
		else if((input[0]=='+'||input[0]=='-')&amp;&amp;(input[1]=='.'))
		{
			pruef=false;
		}
		else
		{
			pruef=true;
			system(&quot;cls&quot;);
			intin=atof(input);
			printf(&quot;\n\n\n\n\n\t\t\tALLES OK\n\n\n\t\t\tFloatwert: %f\n\n\n&quot;,intin);
		}
	}while(pruef==false);
}
</code></pre>
<p>MFG aus Berlin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286431</guid><dc:creator><![CDATA[Achla_Alam]]></dc:creator><pubDate>Wed, 16 May 2007 18:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Falscheingaben für float und double abfangen in c on Wed, 16 May 2007 19:01:09 GMT]]></title><description><![CDATA[<p>=&gt; Falsches Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286446</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 16 May 2007 19:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to Falscheingaben für float und double abfangen in c on Wed, 16 May 2007 20:56:59 GMT]]></title><description><![CDATA[<p>oh, oops, sorry stimmt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /> *neuling is* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286521</guid><dc:creator><![CDATA[Achla_Alam]]></dc:creator><pubDate>Wed, 16 May 2007 20:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to Falscheingaben für float und double abfangen in c on Thu, 17 May 2007 02:08:21 GMT]]></title><description><![CDATA[<p>Achla_Alam schrieb:</p>
<blockquote>
<p>Hallo Leute,</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

void main() //int wäre angebrachter
{
	char input[500];
	bool pruef=false;
	int i=0, j=0, k=0, x=0,y=0, z=0;
	float intin;
	do
	{
		system(&quot;cls&quot;);
		printf(&quot;\n\n\n\tBitte Wert eingeben: &quot;);
		gets(input); //fgets verhindert einen überlauf
</code></pre>
<p>MFG aus Berlin</p>
</blockquote>
<p>mal so auf dem ersten blick aber wozu machst du das ?<br />
wenn du fehler unterbinden willst dann:</p>
<p>a = scanf(...)</p>
<p>if(!a)...<br />
else</p>
<p>dann machste eine ausgabe dass es eine falscheingabe war</p>
<p>ansonsten filterst du gleich alles raus mit der forschleife<br />
dort lässt du 0-9 zu und liest nur einen punkt ein, was genau der benutzer falsch eingibt interessiert ihn wohl nicht, also einfach korrigieren und gut is</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286594</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Thu, 17 May 2007 02:08:21 GMT</pubDate></item></channel></rss>