So, ich hab mal schnell deinen Code bei mir getestet:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES //Anpassung an VS
#include <math.h>
#include <time.h> //Anpassung an VS
#define ACCURACY 1e-4
float get_user_input(int Winkelfunktion, int Winkel){
float faktor;
float wurzel;
int r;
if(Winkelfunktion==1){
printf("Was ist der Wert der Funktion cos(%i)\n",Winkel);
r = scanf("%fsqrt(%f)",&faktor,&wurzel);
}
else{
printf("Was ist der Wert der Funktion sin(%i)\n",Winkel);
r = scanf("%fsqrt(%f)",&faktor,&wurzel);
}
if(r == 1) //Hier liegt der Hase im pfeffer
return faktor;
return(faktor*sqrt(wurzel));
}
int main() {
double right;
int correct;
int angles []={0,30,45,60,90,180,270,360};
srand(time(NULL));
int is_cos = rand()%2;
int angle = angles[rand()%8]; //Edit: %8 angefügt
if (is_cos==1){
right=cos(angle/180.*M_PI); //Anpassung an VS
} else {
right=sin(angle/180.*M_PI); //Anpassung an VS
}
printf("user input: %f, right: %f", get_user_input(is_cos,angle), right); //DEBUG
correct=fabs(get_user_input(is_cos,angle)/right-1)<=ACCURACY;
printf("Ihre Antwort war %s!\n",correct ? "richtig" : "falsch");
fflush(stdin); //Anpassung an VS
getchar(); //Anpassung an VS
return 0;
}
Das Problem ist nicht, dass dein Code nicht Funktioniert, sondern dass Aufgrund der Eingabeart falsche Ergebnisse kommen. Wird in deinem Code kein
eingeben auf die Frage sin(30), so kommt da ein -inf zurück, weil die Variable wurzel nicht gesetzt ist.
Daher auch die Abfrage, wie viele Parameter eingeben wurden.
Redundanz macht wiederholen unnötig.
quod erat expectandum