Forum: C-Programmieren
Moderatoren: juergen, Martin ConradThema: [EDIT] - switch dreht durch
[EDIT] - switch dreht durch
bluethoot am 19.07.2010 um 12:22
doch dann kommt nur mehr die default meldung und ich kann es nur mehr "händisch" abbrechen.
wie kann ich den fehler beseitigen.
hier der code
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19;
int u4;
do
{
printf("\n\n\n\n\n\n\n Turmrechnen\n\n\n\n");
printf(" <1> Klein 2-9\n");
printf(" <2> Gross 11-19\n");
printf(" <3> Zurueck\n");
printf(" ");
scanf("%d",&u4);
system("cls");
switch(u4)
{
case 1:
printf("\n\n Gieb nun die basis ein\n");
printf(" ");
scanf("%lf",&t1);
fflush(stdin);
t2=t1*2;
printf("\n Mal 2 = %lf\n",t2);
t3=t2*3;
printf(" Mal 3 = %lf\n",t3);
t4=t3*4;
printf(" Mal 4 = %lf\n",t4);
t5=t4*5;
printf(" Mal 5 = %lf\n",t5);
t6=t5*6;
printf(" Mal 6 = %lf\n",t6);
t7=t6*7;
printf(" Mal 7 = %lf\n",t7);
t8=t7*8;
printf(" Mal 8 = %lf\n",t8);
t9=t8*9;
printf(" Mal 9 = %lf\n",t9);
t10=t9/2;
printf(" Durch 2 = %lf\n",t10);
t11=t10/3;
printf(" Durch 3 = %lf\n",t11);
t12=t11/4;
printf(" Durch 4 = %lf\n",t12);
t13=t12/5;
printf(" Durch 5 = %lf\n",t13);
t14=t13/6;
printf(" Durch 6 = %lf\n",t14);
t15=t14/7;
printf(" Durch 7 = %lf\n",t15);
t16=t15/8;
printf(" Durch 8 = %lf\n",t16);
t17=t16/9;
printf(" Durch 9 = %lf\n\n\n",t17);
system("pause");
system("cls");
break;
case 2:
printf("\n\n Gieb nun die basis ein\n");
printf(" ");
scanf("%lf",&t1);
fflush(stdin);
t2=t1*11;
printf("\n Mal 11 = %lf\n",t2);
t3=t2*12;
printf(" Mal 12 = %lf\n",t3);
t4=t3*13;
printf(" Mal 13 = %lf\n",t4);
t5=t4*14;
printf(" Mal 14 = %lf\n",t5);
t6=t5*15;
printf(" Mal 15 = %lf\n",t6);
t7=t6*16;
printf(" Mal 16 = %lf\n",t7);
t8=t7*17;
printf(" Mal 17 = %lf\n",t8);
t9=t8*18;
printf(" Mal 18 = %lf\n",t9);
t10=t9*19;
printf(" Mal 19 = %lf\n",t10);
t11=t10/11;
printf(" Durch 11 = %lf\n",t11);
t12=t11/12;
printf(" Durch 12 = %lf\n",t12);
t13=t12/13;
printf(" Durch 13 = %lf\n",t13);
t14=t13/14;
printf(" Durch 14 = %lf\n",t14);
t15=t14/15;
printf(" Durch 15 = %lf\n",t15);
t16=t15/16;
printf(" Durch 16 = %lf\n",t16);
t17=t16/17;
printf(" Durch 17 = %lf\n",t17);
t18=t17/18;
printf(" Durch 18 = %lf\n",t18);
t19=t18/19;
printf(" Durch 19 = %lf\n\n",t19);
system("pause");
system("cls");
break;
case 3:
break;
default :
printf("\n\n\n\n\n\n\n\n\n\n\n Keine gueltige Eingabe\n\n\n\n\n\n\n\n\n\n\n\n");
system("pause");
system("cls");
}
}
while(u4!=3);
system("pause");
return 0;
}
und dann noch eine frage am rand giebts eine möglichkeit bei der eingabe den punkt durch ein komma zu ersetzen
lg blue
[EDIT] - Re: switch dreht durch
bcc-fan am 25.07.2010 um 15:09
abhängig.
Aber hier schon mal ein wenig kürzer mit Kommentaren im Quelltext:
int main(int argc, char *argv[])
{
long double t1;
int u4;
do
{
printf("\n\n\n\n\n\n\n Turmrechnen\n\n\n\n");
printf(" <1> Klein 2-9\n");
printf(" <2> Gross 11-19\n");
printf(" <3> Zurueck\n");
printf(" ");
scanf("%d",&u4);
system("cls");
switch(u4)
{
case 1:
printf("\n\n Gib nun die basis ein\n");
printf(" ");
int tk;
scanf("%lf",&t1); // scanf arbeitet nicht immer wie eerwartet, deshalb werden oft Alternativen eingesetzt
printf("Test: %lf\n", t1);
fflush(stdin); // unzuverlässig -> stdin
for(tk = 1; tk < 10; tk++)
{
t1 = tk * t1;
printf(" Mal %d = %lf\n", tk, t1);
}
for(tk = 1; tk < 10; tk++)
{
t1 = t1/tk;
printf(" Durch %d = %lf\n", tk, t1);
}
break;
Ist nur ein Ausschnitt - sollte klar sein.
Punkt - Komma ist möglich entweder selbst was basteln oder locale.h anschauen - verstehen und nutzen.
MfG bcc-fan
--
C/C++
only just for fun
Re: switch dreht durch
bluethoot am 26.07.2010 um 10:43
bin neuling und hab jezt mal ne keybord abfrage eingebaut die das problem lösen sollte
aber warum ist stdin unzuverlässig
lg blue
[EDIT] - Re: switch dreht durch
bcc-fan am 26.07.2010 um 12:27
Auszug aus einem Normenwerk, ANSI-C:
Zitat:
7.19.5.2 The fflush function
Synopsis
#include <stdio.h>
int fflush(FILE *stream);
Description
If stream points to an output stream or an update stream in which the most recent
operation was not input, the fflush function causes any unwritten data for that stream
to be delivered to the host environment to be written to the file; otherwise, the behavior is
undefined.
If stream is a null pointer, the fflush function performs this flushing action on all
streams for which the behavior is defined above.
Returns
The fflush function sets the error indicator for the stream and returns EOF if a write
error occurs, otherwise it returns zero.
Kurz: fflush(stdout) = okay
fflush(stdin) = nicht okay => undefiniertes Verhalten
Das Dumme an der Geschichte ist das sich kaum ein Compiler 100% an solche Vereinbarungen hält. Entweder er kann weniger, oder mehr, oder auf Teilgebieten beides.
Das bedeutet im Einzelfall unter bestimmten Bedingungen kann das, manchmal auch nur hin und wieder, funktionieren aber man kann sich nicht darauf verlassen.
Oder im Zweifel die Dokumentation des Compilers lesen, es gibt mindestens einen Compiler der fflush(stdin) können will. Der Hersteller des Compiler betrachtet das als Erweiterung des C-Standards.
Nachtrag:
Hier mal eine interessante Diskussion zu dem Thema:
Eingabepuffer
Die Jungs haben leider nicht alle ihre Testumgebung beschrieben.
MfG bcc-fan
--
C/C++
only just for fun
Re: switch dreht durch
ITEDVO am 04.08.2010 um 03:54
schule so eine funktion ausarbeiten, keine ahnung wo ich dieses hab, wenn ichs finde poste ichs mal =b
--
Was nicht ist, kann noch werden =b
rock by vote or play by vote
<a href="http://www.selfmades.eu" target="blank"><img src="http://selfmades.eu/Clanwerbung/LinkUs/ITEDVO.jpg" alt="Clan Selfmades" title="Clan Selfmades"></a>
