2015-12-28 4 views
0

Я только начал программировать на C, и я нашел проблему при запуске программы. Ошибка следующая: resto == a % b;Ошибка: недопустимые операнды типов «float» и «float» to binary 'operator%'

[Error] invalid operands of types 'float' and '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; 
} 

Решение есть:

postimg.org/image/guoxt6evn

ответ

2

The error is the following,' resto == a % b' ;

Это потому, что оператор модуль % не может применяться к float или double. Он предназначен для получения остатка, когда целочисленный тип x делится на y. Он не имеет никакого значения, когда вы используете его с float или double.

Также обнаружен Draco18s, этот resto == a % b не то, что вы хотите, даже если a и b являются целыми. == является логическим оператором, поэтому выражение будет давать временное значение 1 (для true) и 0 в противном случае. Но это временное значение - NOT, присвоенное resto. Вместо этого вам нужно использовать оператор назначения =.

+0

Как вы решаете? Я изменился на int 'resto', но продолжает ошибку ... –

+1

Вы должны изменить тип 'a' и' b' на целое число, а не тип результата. – Draco18s

+0

Вы говорите правильно. Моя проблема - это что-то еще: Если бы я хотел поместить число с запятой и в a и в число с запятой и буквой, как я должен это сделать? Что вы сказали, прекрасно, если a и b являются целыми числами! Должен ли я подать заявку, если? @ Draco18s –

1

После комментарию обсуждения, проблема сводится к этой линии:

float a, b, somma, differenza, prodotto, quoziente; 
    int resto; 

Вам нужно изменить a и b к целые числа:

float somma, differenza, prodotto, quoziente; 
    int a, b, resto; 

В связи с вопросом указал @artm

+0

Погрешности сравнения хорошо место, но ошибка компиляции, потому что '' Ā' и b' является поплавком, поэтому он не может применить '%' оператор. – artm

+0

- это то, что я на самом деле сделал, есть ошибка записи. –

+0

Ага, прошу прощения. В следующий раз используйте комментарии, чтобы указать соответствующую строку. например 'resto = a% b; // ОШИБКА ЗДЕСЬ – Draco18s

Смежные вопросы