爱生活

 找回密码
 立即注册
搜索
查看: 82|回复: 0
打印 上一主题 下一主题

c语言,忽略scanf的返回值怎么解决?,scanf返回值被忽略怎么解决

[复制链接]

14万

主题

14万

帖子

-134万

积分

限制会员

跳转到指定楼层
楼主
发表于 2022-6-13 02:12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

c语言,忽略scanf的返回值怎么解决?
如图1的在devc++里正常运行,但到了网页平台哪里却出现了忽略scanf返回值



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


为什么编程总是说我忽略了scanf的返回值,很多次都这样改不了了


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


scanf的返回值缺失该怎么解决


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


关于scanf的返回值问题。


scanf原理是读入你输入的字符串然后尝试根据提供的格式进行匹配,并存入对应变量
这个过程中scanf是尽可能的匹配第一个变量,因此你输入的整个字符串都被视作是第一个%s的值
第一个例子中前两个变量都是%f,因此scanf能够判断如何进行分割;第二个例子中前两个都是字符串
如果你在printf scanf的返回之后再printf name的值就会发现整个输入字符串都被读入了name

要达到你需要的效果可以通过限定字符串不读取特定字符,达到分隔符的目的,如:
printf("%i\n",scanf("%[^, ],%[^, ],%i,%79[^\n]", name, album, &year, comments));这样前两个字符串必须不包含逗号,那么当输入aa,bb,2018,cccc时就能匹配正确





上一篇:怎样看八字合不合,怎么看八字合不合适
下一篇:防风打火机的原理及构造?,防风打火机的构造是怎么样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|手机版|小黑屋|爱生活 ( 蜀ICP备20006951号 )|

 

快速回复 返回顶部 返回列表