永发信息网

c语言的细节问题

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

你这个问题涉及到了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

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

  • 2楼网友:西岸风
  • 2021-05-05 00:15
编译程序有警告吧
  • 3楼网友:玩世
  • 2021-05-04 23:36

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

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

  • 4楼网友:十鸦
  • 2021-05-04 22:40

#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了

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯