鱼C论坛

 找回密码
 立即注册
查看: 3683|回复: 8

一个有关scanf函数的问题

[复制链接]
发表于 2012-1-1 12:00:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天在一个财务管理系统中发现scanf函数里竟然没有用&符号也可以编译,我困顿了。。求高手解释
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-1 12:17:14 | 显示全部楼层
另外沙发自己做,补充一点,那就是为什么有些人喜欢在scanf后面加个getchar();如
scanf("%d",&a);
getchar();
我就弄不懂了,scanf()函数内有包含按回车才会往下继续的功能了把,还用这个干嘛啊,纠结死了,求高手啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-1 12:45:23 | 显示全部楼层
int a=5;
int * pa = &a;
scanf("%d",pa);
人家用了指针变量了就不需要取地址了
&a是取得变量a的地址,这个写法和pa差不多,它们的唯一区别在于&a是常量而pa是变量。

scanf("%d",&a);
你输入后要换行才能跳出scanf语句。此时你输入的数字被读到a里了,但是换行仍然在输入缓冲区里,加上getchar();是为了把缓冲区里的换行给去掉;不加getchar();的话你下面如果是scanf("%c",&b);此时b的值就一定是换行的acsii码。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-1 13:22:13 | 显示全部楼层
人家加上这个可能为了调试吧。 呵呵
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-1 23:47:34 | 显示全部楼层
支持3楼的说法。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-2 10:00:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-2 10:05:02 | 显示全部楼层
仰望天上的光 发表于 2012-1-1 12:45
int a=5;
int * pa = &a;
scanf("%d",pa);

额。。。。突然我又试了下,发现比如说这个程序:
main()
{
int a
scanf("%d",&a);
getchar();
printf("%d",a);
}
就算我不输入getchar函数打印出啦的也是我输入的值啊,这要怎么解释啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-2 10:32:22 | 显示全部楼层
因为你下面没输入
一步一步跟进去 会发现getchar为getc(stdin)
stdin为&_iob[0]
调试时看下&_iob[0]的内存情况
缓冲区最后多个回车oa

后面的输入就会先输入一个回车 用scanf(" %type") 可以忽略前面的空格
用while(isspace(ch = getchar()))
        ;
可以忽略空格

或者就fflush(stdin)
小甲鱼最新课程 -> https://ilovefishc.com
头像被屏蔽
发表于 2012-1-2 15:34:12 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-10 14:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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