鱼C论坛

 找回密码
 立即注册
查看: 4417|回复: 7

[技术交流] sanf()函数的奥秘

[复制链接]
发表于 2013-12-26 20:18:56 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void main()
{
        char a, b, c;
        scanf("%c", &a);
        if (a == '1')
                printf("asd\n");
        scanf("%c", &b);
        if (b == '2')
                printf("fgh\n");
        if (c != '3')
                printf("qwe\n");
}
我输入  12回车  然后显示的是
asd
fgh
qwe
这是为什么,谁能详细解答这些数据是怎么被处理的?谢了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-26 20:48:43 | 显示全部楼层

回帖奖励 +1 鱼币

因为没有else 所以程序继续往下执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-26 21:35:25 | 显示全部楼层
我记得,scanf在接受输入的时候是遇到一个结束符停止输入,但是在读取缓冲区的数据时,并不是立即结束,我猜想你的输入12回车之后立马就打印这些信息了;大概是,scanf在等待输入,当你回车之后,scanf在输入缓冲区中先把1赋给a,然后将2赋给b,最后将回车符赋给c,而你的判断有是分别开始的,那么刚好每一个条件都成立,所以都打印了。我还记得,以前我为了避免这个问题的时候,在为一个字符型使用scanf赋值的时候首先使用getch()函数除去缓冲区的东西,然后再使用scanf给其赋值。具体怎么回事,我也说不上来,你就不要会问了哈,我只知道这么多了...

评分

参与人数 1鱼币 +1 收起 理由
alac + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-26 21:42:13 | 显示全部楼层
首先,我必须告诉你,你这个程序本身就乱七八糟,利用scanf何必还要分开,下面是对的
#include<stdio.h>
void main()
{
        char a, b, c;
        scanf("%c%c%c",&a,&b,&c);
        if (a == '1')
                printf("asd\n");
        if (b == '2')
                printf("fgh\n");
        if (c!= '3')
                printf("qwe\n");
}
本问题是比较ASCII码值大小的,因为if是并列的,所以会不断执行if语句,并输出相应数据,当你输入12时,因为你只给a赋了值,且12不是字母,所以输出asd,b,c,没有被赋值,默认判断成立,全部输出。。。。

评分

参与人数 1鱼币 +1 收起 理由
alac + 1 谢了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-27 12:10:58 | 显示全部楼层

你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-27 22:00:22 | 显示全部楼层
alac 发表于 2013-12-27 12:10
你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的?

scanf 就是一个输入函数,这能体现什么功能?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-27 22:36:11 | 显示全部楼层
︶ㄣ痕迹の天涯 发表于 2013-12-27 22:00
scanf 就是一个输入函数,这能体现什么功能?

但是你完全理解这个函数怎么用了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-28 09:13:58 | 显示全部楼层
应该是char问题,当输入12回车时内存中有3个字符,第一次接收1,然后是2,第3个是回车,那么3个if条件都满足所以都输出,另外C没有用scanf输入,所以里面是随机数自然不等于3,所以条件3成立输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-23 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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