Целые числа будут преобразованы в числа с плавающей запятой, т. Е. Если задано число 5
, оно будет неявно преобразовано в 5.0
для переменной с плавающей запятой. Следовательно, не стоит беспокоиться об этом.
Используйте следующую программу:
#include <stdio.h>
float ask_loop(float f) {
int ret = scanf("%f", &f);
float fl = f;
if (ret != 1) { // if scanf() returns error code
printf("Error! Please input numbers correctly.\n");
fflush(stdin);
fl = ask_loop(f);
}
return fl;
}
int main(void)
{
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
float a, b, sm;
int i = 2;
printf("First number: \n");
a = ask_loop(a);
fflush(stdin);
printf("Second number: \n");
b = ask_loop(b);
printf ("%.2f + %.2f = %.2f -> Summe \n", a, b, sm = a+b);
printf("%.2f / %d = %.2f -> Mittelwert \n", sm, i, sm / i);
printf("%.2f - %.2f = %.2f -> Differenz \n", a, b, a - b);
printf("%.2f * %.2f = %.2f -> Produkt \n", a, b, a * b);
printf("%.2f / %.2f = %.2f -> Division\n", a, b, a / b);
}
Здесь мы использовали функцию ask_loop()
, которая проверяет, не возвращает ли scanf()
код выхода. Если нет, это означает, что он успешно принял значение, в противном случае снова выполняется рекурсия. В конце функции он возвращает введенное число и присваивает переменной в main()
.
Пример вывода:
First number: // --- INPUT
abc
Error! Please input numbers correctly. // --- OUTPUT
2.0
Second number: // --- INPUT
5
2.00 + 5.00 = 7.00 -> Summe // --- OUTPUT
7.00 / 2 = 3.50 -> Mittelwert
2.00 - 5.00 = -3.00 -> Differenz
2.00 * 5.00 = 10.00 -> Produkt
2.00 / 5.00 = 0.40 -> Division (5 -> 5.00)