读书人

采用scanf判断数据输入的合法性时当

发布时间: 2012-03-05 11:54:01 作者: rapoo

采用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,你就可以看到错误了。。

读书人网 >C语言

热点推荐