c语言的细节问题
- 提问者网友:锁深秋
- 2021-05-04 21:36
- 五星知识达人网友:煞尾
- 2021-05-04 22:12
- 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了