Ввод числа с плавающей запятой в программу, которая имеет дело только с целыми числами

У меня есть программа, но когда я ввожу числа с плавающей запятой всякий раз, когда программа запрашивает ввод, программа резко пропускает шаг и переходит к конечному выводу. Программа приведена ниже:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a,b,c;
  int i;

  printf("Please enter a number: ");
  scanf("%d", &a);
  printf("Please enter a number: ");
  scanf("%d", &b);

  c = 0; 
  for(i=0; i < b; i++)
    {
    c = c + a;
    } 

  printf("%d x %d = %d\n", a, b, c);

  return 0;
}

Когда я ввожу int для a и число с плавающей запятой для b , программа выдаст результат, как и ожидалось, если числа после десятичной точки для b усечено. Однако, когда я ввожу число с плавающей запятой для a , программа не принимает значение для второго числа b , а вместо этого пропускает этот шаг и выводит целочисленную версию ax - 858993460 = 0 .

Например:

a = int, b = float

Введите число: 3
Введите число: 5.6
3 x 5 = 15

a = с плавающей запятой, b = пропущено

Введите число 3,9
Введите число: 3 x -858993460 = 0

Все недостатки в коде являются преднамеренными, но я просто хотел знать, почему он ведет себя так, как я объяснил выше. Я знаю, что это связано с попыткой ввести число с плавающей запятой в целое число со знаком, но я не уверен, что именно заставляет его пропустить второй scanf ("% d", & b) . Кто-нибудь может объяснить, почему это происходит?

Спасибо.

5
задан mskfisher 11 May 2012 в 16:08
поделиться