采用scanf判断数据输入的合法性时,当前面的是数字后面是字符时能够通过解决方法

采用scanf判断数据输入的合法性时,当前面的是数字后面是字符时能够通过
C/C++ code
//切削速度计算工具
//本程序由丁其编写
//date:2012-01-11 
#include<stdio.h>
#include<conio.h>
main()
{
 float d,v;
 int s,i=1; 
 while(i)
 {
     printf("请输入工件的直径,单位毫米:\a");
     if(scanf("%f",&d) && d >= 0)              //判断数据输入的合法性
     {
         i = 0;                      //数据输入正确,赋值为0,退出循环 
         fflush(stdin);
   }
     else
     {
         printf("\n");
         printf("你输入的直径错误,请重新输入!\n\a");
         printf("\n");
         fflush(stdin);
   }      
 }
 printf("\n");
 i = 1;                           //循环开关重新赋值为1 
 while(i)
  {
     printf("请输入主轴转速:\a");
     if(scanf("%d",&s) && s >= 0)              //判断数据输入的合法性
     {
         i = 0;                      //数据输入正确,赋值为0,退出循环 
         fflush(stdin);
   }
     else
     {
         printf("\n");
         printf("你输入的转速错误,请重新输入!\n\a");
         printf("\n");
         fflush(stdin);
   }      
 }
 printf("\n");
 printf("直径D=%0.3f    转速S=%d   切削速度V=%0.2f米/分\n\a",d,s,v=(3.14*d*s/1000));
 _getch();
 return(0);
}
          


当我输入直径为75fd,不报警,数据通过,直径就是75,请问这个是什么原因。


谢谢!!!!

------解决方案--------------------
有这样的要求的话
就用字符串吧,先判断合法性,再转成数字
------解决方案--------------------
scanf读入的时候先读到75,然后i = 0,退出了。。你把刷新输入缓冲区的和把i一直赋1,你就可以看到错误了。。