2016-04-15 3 views
-3

Я использую Bloodshed DevC++ для компиляции этого кода. Но у меня проблема с номером float scanf. И я не хочу получать десятичный тип, но результат должен иметь тип float, Но результат всегда будет 0.000000.C++ float scanf номер ввода

Это код:

#include <stdio.h> 

main() 

{ 
    float A, B, C; 
    B = 3.14; 

    C = (4*B*A*A); 

    printf (" Enter value of A : "); scanf("%f", &A); 
    printf ("\n"); 
    printf (" So, the result is : %f", C); 
    printf ("\n"); 
} 

И результат: Float.jpg

Enter value of A : 22.45 

So, the result is : 0.000000 

-------------------------------- 
Process exited after 7.235 seconds with return value 0 
Press any key to continue . . . 

Было бы лучше, если бы кто-нибудь мне помочь, спасибо :)

+2

Таким образом, компьютер является мистическим и знает 'A' перед тем, как вводить его, поэтому зная значение' C' из этого уравнения 'C = (4 * B * A * A);' –

+1

'A' неинициализирован –

+1

PS: проверьте возвращаемое значение из 'scanf' –

ответ

1

Когда вы C = (4*B*A*A);, это не означает, что C будет всегда содержит то, что выражение оценивается. Это означает, что вы изменяете C на основе значения этого выражения в этот момент.

So change A после этого пункта не влияет на значение C. А так как A неинициализирован, это приводит к undefined behavior, что означает, что результаты не обязательно предсказуемы.

Вам нужно сначала прочитать в значении A, затем изменить C на основе текущих значений A и B:

printf (" Enter value of A : "); scanf("%f", &A); 
C = (4*B*A*A); 
printf ("\n"); 
printf (" So, the result is : %f", C); 
printf ("\n"); 

Чтобы сделать то, что вы хотя исходный код будет делать, вам нужно будет определить функцию, которая будет вычислять значение C, когда вы его вызываете.

#include <stdio.h> 

int C(int A, int B) 
{ 
    return 4*B*A*A; 
} 

int main() 
{ 
    float A, B; 
    B = 3.14; 

    printf (" Enter value of A : "); scanf("%f", &A); 
    printf ("\n"); 
    printf (" So, the result is : %f", C(A,B)); 
    printf ("\n"); 
} 
0

Вы расчета «результат», прежде чем задавать для ввода:

float A, B, C; 
B = 3.14; 

C = (4*B*A*A); // What value has A here? Probably 0 !! 

printf (" Enter value of A : "); scanf("%f", &A); // This has no influence 
                // whatsoever on the 
                // value of C 
printf ("\n"); 
printf (" So, the result is : %f", C); 
printf ("\n"); 

Я не уверен, что C (вопрос был помечен C++ раньше), но я предполагаю, что A инициализируется в 0, таким образом, результат действительно равен 0.

PS: вид компилятора выдаст предупреждение, что-то вроде «Предупреждение: переменная A используется неинициализирована».

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