Если нет причин использовать% .2f для сканирования, просто используйте% f
#include <stdio.h>
#include <conio.h>
#define PI 3.14
int main() {
float r,a,c;
printf("enter radius: \n");
scanf("%f",&r);
c = r * PI * 2;
a = r * r * PI;
printf("area:%.2f circumference:%.2f \n",c,a );
return 0;
}
Пример:
daniel@daniel-FX503VM:~/Documents/test$ ./zero
enter radius:
1
area:6.28 circumference:3.14
.2 в printf является спецификатором формата печати и не должен влиять на scanf
То, куда вы помещаете .2 в scanf, - это поле ширины, которое определяет максимальное количество символов, которое нужно прочитать в текущей операции чтения (необязательно). Однако в этом контексте .2 символа в качестве ширины не имеют смысла, поскольку ширина должна быть целым числом.
Если то, что вы на самом деле пытаетесь сделать, это прочитать только 2 символа, вы можете сказать
scanf("%2f", &r);
Но имейте в виду, что "." также будет считаться как символ. Если вы просто хотите, чтобы выходные данные были двумя десятичными знаками, то предложенного выше кода должно быть достаточно. Если вы хотите округлить его внутри, я бы посоветовал вам прочитать этот пост