Fehler: ungültige Operanden der Typen "float" und "float" to binary 'operator%'
Ich habe gerade angefangen zu Programmieren in C, und ich fand ein problem, wenn das Programm läuft.
Die Fehlermeldung ist folgende,resto == a % b
;
[Fehler] ungültige Operanden der Typen "float" und "float" to binary 'operator%' in C
#include<stdio.h>
#include <math.h>
char n;
int main (){
printf ("Programma che svolge ogni tipo di operazione aritmetica tra 2 numeri a e b\n'n' per chiudere\nPremere 'invio' per continuare\n");
float a, b, somma, differenza, prodotto, quoziente;
int resto;
while (n=getchar()!='n'){
printf ("Inserisci a\n");
scanf ("%f",&a);
printf ("Inserisci b\n");
scanf ("%f",&b);
somma = a + b;
differenza = a - b;
prodotto = a * b;
quoziente = a / b;
resto = a % b;
printf ("somma = %f + %f = %f\n",a,b,somma);
printf ("differenza = %f - %f = %f\n",a,b,differenza);
printf ("prodotto = %f * %f = %f\n",a,b,prodotto);
printf ("quoziente = %f /%f = %f\n",a,b,quoziente);
printf ("resto = %f %% %f = %d\n",a,b,resto);
}
return 0;
}
Die Lösung gibt:
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil der modulo-operator
%
nichtfloat
oderdouble
. Es ist gedacht, um die Rest, wenn der integer-Typx
geteilt durchy
. Es hat keine Bedeutung, wenn Sie es mitfloat
oderdouble
.Gesehen, von Draco18s, diese
resto == a % b
ist nicht, was Sie wollen, auch wenna
undb
sind vom Typ integer. Die==
ist logischer operator, so dass die expression erbringt eine temporäre Wert von1
(für true) und0
sonst. Aber das temporäre Wert ist NICHT zugeordnetresto
überhaupt. Sie benötigen Zuweisungsoperator=
statt.a
undb
auf ganze Zahl, nicht das Ergebnis geben.a
undb
zuint
; ändern Sie die Steuerelement-Zeichenfolge inscanf
undprintf
entsprechend, dh%d
statt%f
.1,2367
(oder1.2367
im anderen einheimischen) ist kein integer-und modulo-operator nicht definiert für floating-point-zahlen. Wenn Sie möchten, verwenden Sie schwebt, verwenden Siefmod
fmod
tut. Es ist nur die C%
operator definiert ist, nur auf ganze zahlen (wahrscheinlich aus "historischen Gründen")Folgenden Kommentar Diskussion, das problem reduziert sich auf diese Zeile:
Müssen Sie ändern
a
undb
Ganzzahlen:Aufgrund der Problematik aufgezeigt von @artm
a
undb
sind, float, also kann er nicht gelten%
Betreiber.resto = a % b; // ERROR HERE
fmod
. Ich weiß nicht, wie Sie sein könnte, immer verwirrt.devi usare la http://www.cplusplus.com/reference/cmath/fmod/fmod per fare il resto di tipi-float-a-Doppel