采用scanf判断数据输入的合法性时,当前面的是数字后面是字符时能够通过解决方法
采用scanf判断数据输入的合法性时,当前面的是数字后面是字符时能够通过
当我输入直径为75fd,不报警,数据通过,直径就是75,请问这个是什么原因。
谢谢!!!!
------解决方案--------------------
有这样的要求的话
就用字符串吧,先判断合法性,再转成数字
------解决方案--------------------
scanf读入的时候先读到75,然后i = 0,退出了。。你把刷新输入缓冲区的和把i一直赋1,你就可以看到错误了。。
- 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,你就可以看到错误了。。