| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2011 人关注过本帖
标题:求助! 请问 scanf 读取不够不执行下一步是什么情况?
只看楼主 加入收藏
xxx363710
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-4
收藏
 问题点数:0 回复次数:10 
求助! 请问 scanf 读取不够不执行下一步是什么情况?
各位大神求帮助,初学者一枚,谢谢了!

源码如下:

/*#include <stdio.h>

double cube_root(double v);

int
main(int argc, char *argv[]) {
    int num;
    double x,y,z,w;
    printf("Please enter 3 doubles:");
    num = scanf("%lf%lf%lf%lf",&x,&y,&z,&w);
    printf("You entered %d values\n",num);
return 0;
}
*/


问题: 当我输入不够4个double值时,程序不能继续执行printf("You entered %d values\n",num)语句,请问哪里出错了?
谢谢各位!!
搜索更多相关主题的帖子: include 下一步 double return values 
2014-08-04 10:00
xxx363710
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-4
收藏
得分:0 
请看过的大神帮助下,应该是我对scanf的理解有误,但是我查出的和我的应该是一样的,所以很疑惑,请大神们指点!
2014-08-04 10:39
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
你代码写了
num = scanf("%lf%lf%lf%lf",&x,&y,&z,&w);
要输入4个,你非要输入3个,那程序就会停在那里一直等你输入第4个。

总有那身价贱的人给作业贴回复完整的代码
2014-08-04 11:42
j521887
Rank: 2
等 级:论坛游民
帖 子:26
专家分:42
注 册:2014-7-21
收藏
得分:0 
num = scanf("%lf%lf%lf%lf",&x,&y,&z,&w); num是一个int型变量,又不是数组,你一给他四个,他接受不了。
2014-08-04 13:10
xxx363710
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-4
收藏
得分:0 
回复 3 楼 embed_xuel
谢谢!可是我记得以前是这样的,如果程序写的读取4个,打上去5个只会读取4个,打上去3个只会读取三个,这个程序如果我不输入数字也可以显示读取0个,就是只能0或者4,很郁闷
2014-08-04 14:04
xxx363710
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-4
收藏
得分:0 
回复 4 楼 j521887
这里的num应该是读到数的个数,所以是int
2014-08-04 14:06
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
对于scanf,允许它不读入,不允许你不输入。 你指定了四个变量,则必须输入四个值,允许你出错,不允许你输入少了。
收到的鲜花
  • xxx3637102014-08-04 14:47 送鲜花  1朵  

代码测试环境:  WinXP+C-Free5.0.
2014-08-04 14:25
xxx363710
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-8-4
收藏
得分:0 
回复 7 楼 vvvcuu
谢谢版主,已经明白了,如果我输入: 1 2 3,就可以printf "You entered 3 values"了。

另外有个问题求教,就是double 和 float 的问题:

/*#include <stdio.h>
int
main(int argc, char *argv[]) {
    int num;
    double x;
    float y;
    printf("Please enter 2 values:");
    scanf("%lf%f",&x,&y);
    printf("x = %f \n",x);
    printf("y = %f \n",y);
    printf("x2 = %10.8f \n",x);
    printf("y2 = %10.8f \n",y);
return 0;
}*/

得到的是以下结果:
Please enter 2 values:
2.123456789
2.123456789
x = 2.123457
y = 2.123457
x2 = 2.12345679
y2 = 2.12345672
请按任意键继续. . .

对于输出的x和y,我觉得是默认float和double都是6位小数?可是我尝试变成%10.8f,结果还是可以输出,但是float的数据有差错,请问这是为什么,我觉得似乎有很深奥的东西。

谢谢!麻烦了~
2014-08-04 14:44
乾坤洞主
Rank: 3Rank: 3
来 自:乾坤洞
等 级:论坛游侠
帖 子:93
专家分:103
注 册:2012-7-18
收藏
得分:0 
回复 8 楼 xxx363710
http://

http://
scanf()具体的实现
看完就懂了。

[ 本帖最后由 乾坤洞主 于 2014-8-4 15:06 编辑 ]

和尚我爱四处游,疯疯癫癫有理由    
开开心心是正道,愁愁烦烦不应该
2014-08-04 15:05
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 8 楼 xxx363710
没什么深奥的。

float的有效位数一般就是6-7位,一般认为是6位, 后面的即使输出也不再有效。
而double的有效数字长达18位,所以double可以正常输出。


另外,我不是本版的版主。版主名单可以参见本版主页。
收到的鲜花
  • xxx3637102014-08-04 17:19 送鲜花  3朵   附言:谢谢解惑!

代码测试环境:  WinXP+C-Free5.0.
2014-08-04 16:25
快速回复:求助! 请问 scanf 读取不够不执行下一步是什么情况?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032029 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved