qhnw.net
当前位置:首页 >> sCAnF返回值被忽略 >>

sCAnF返回值被忽略

scanf函数的原型如下:int scanf(const char * restrict format,);scanf的为什么返回值被忽略的原因是你的代码中没有使用scanf的返回值.最简答的解决方案是强制忽略返回值:(void) scanf("%d", &m);另外一种方法是定义一个临时变量接收scanf函数的返回值.int ret = scanf("%d", &m); 这个编译器还有一个错误,它建议你不要用scanf,而是改为用scanf_s.

在编译的时候加上-Wunused-result选项就可以忽略这种类型的警告.不加的话也只是警告,不是错误.

你输入了浮点数,但是代码中%d要求一个整数,因此程序会将小数点作为分隔符,读入其前面的整数部分到x并输出;再进行下一次循环,程序读入小数点,无法化为整数,此时scanf返回0给y并跳出循环,输出y的值为0 因此,你得到的结果先输出浮点数的整数部分,再输出0是正确的结果

试试:将第4行改成double x,y=0;将第6行改成if(scanf("%lf",&x)==1&&x>0)

我估计sample1的输入错误,而你根本没有检测scanf的返回值,因此没有检测的输入异常只要是输入,就不难假定它总正确

scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数.如:a=scanf("%d",&n);所以只要你输入一个整型,a=1,如果输入的不是整形,是字符串,浮点等等的,a=0;

原因:在ANSI C中没有scanf_s(),只有scanf(),但是scanf()在读取时不检查边界,所以可能会造成内存泄露.于是Microsoft公司在VS中提供了scanf_s(),如果想继续使用scanf这个不安全的函数以下方法可以解决方法一:在文件顶部添加代码:#pragma warning(disable:4996) 即可方法二:错误提示的原因在与vs中的SDL检查;关闭步骤右键单击工程文件-->属性--------> c/c++ ------>所有选项------------> SDL检查选项改为 否

if后不是赋值语句,用单等号…

空格被忽略掉

要解释这个问题需要了解scanf的执行过程.scanf要求是从输入缓冲区中读入一个数字,但是你输入的是字符,scanf没有读到想要的东西,于是直接返回0,再重新开始读取.因为上次你输入的字符还留在缓冲区,scanf还是没读到想要的,反复进行下去,status一直是0,所以死循环咯.希望能帮到你

369-e.net | beabigtree.com | sgdd.net | tfsf.net | nczl.net | 网站首页 | 网站地图
All rights reserved Powered by www.qhnw.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com