永发信息网

c语言的细节问题

答案:5  悬赏:50  手机版
解决时间 2021-05-05 21:40
源程序是这样的#include <stdio.h>void main(){ int f; printf("请输入f的值: "); scanf("%f", &f); printf("this is f: %f\n", f);}下面是输出结果 为何结果总是零。不要说我的数据类型定义错了,我想知道原因为什么会这样?
最佳答案
c++语言不能隐式转换格式,而且微软的新一代编译器对这方面要求严格。支持炫的回答,群91268188他也在里面,上面那个好像不是你现在的号码啊
全部回答

你这个问题涉及到了C语言输入缓冲的问题,当执行scanf("%f", &f); 时,用户从键盘输入数据,

然后程序将输入的数据存入缓冲区,然后程序接下来的工作是从入口开始扫描缓冲区,看有没

有符合标识符数据类型的数据,然后将该数据传送给该标识符。

拿这个例子来书,当你输入12,因为scanf里的数据类型是float程序将12.0000000输入缓冲区,

接下来,因为f的类型是int,从入口0开始扫描,因为没有符合int的类型,所以程序默认将0赋值给它,

这个在不同的编译器是不一样的,有的会有错误出现。

输入缓冲是一个经常遇到的问题,比如经常遇到scanf语句在输入字符时不能输入的问题,这个

也和缓冲有关,因为缓冲区已经存在内容,也就无法输入

我把你的程序改为float f;char c; printf("请输入f的值: "); scanf("%f", &f); printf("请输入字符:\n"); c=getchar();printf("this is f: %f%c\n", f,c);如下图所示,c=getchar()没有执行,它直接从缓冲区将d读给c

我也刚刚接触到缓冲区不久,如有什么纰漏,希望大家给予纠正

编译程序有警告吧

因为类型不对,取不到正确的值。

具体原因google一下,就可以找到printf和scanf的详细介绍。然后就知道原因了。

#include <stdio.h>

void main()

{ int f;

printf("请输入f的值: ");

scanf("%f", &f);

printf("this is f: %f\n", f);}

你把这里printf("this is f: %f\n", f);}改成printf("this is f: %d\n", f);}

再输入数字 或0就ok了

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么是四个全面,论述“四个全面”其各自的意
易学堂托教中心地址在什么地方,想过去办事
米曲霉和发酵粉有什么不同
是红瓶冰红茶好喝,还是绿的
QCC空间是什么?有免费的吗?
为什么元素萨都是先开元素掌握再开饰品呢?
写早上好的诗句,早上好的诗句
为什么欢乐豆天天都不赠送欢乐豆,天天玩不了
我的诺基亚7610上飞信的时候为什么看不到人家
中国地质大学-研究生公寓6号楼在哪里啊,我有
炫舞里HiHiByeBye那段乱乱的怎么按……?
在济南买个N97要花多少钱?
儿女英雄传里的插曲是什么
这样做一个用多张照片把歌曲同一起放
大连金普新区动物疫病预防控制中心怎么去啊,
推荐资讯
手机抢车位可不可以出个“察看举报我的人”的
南海的“千灯湖”英语怎讲?
剖腹产四十天恶 B超检查说宫内还没排尽怎么办
合适 和 适合 有什么区别 ?
杰子饭店地址在什么地方,想过去办事
锻炼下肢的最便捷的方法
佛家说行善积德,改变命运,如何做?
现在什么游戏最火,最好玩?
我的手机QQ2010精简版MRP格式的,挂Q后再输入
亿鑫园宾馆这个地址在什么地方,我要处理点事
发什么到10086 查亲情号码已用时间啊?
我母亲怎么了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?