alac 发表于 2013-12-26 20:18:56

sanf()函数的奥秘

#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
这是为什么,谁能详细解答这些数据是怎么被处理的?谢了

正在写代码 发表于 2013-12-26 20:48:43

因为没有else 所以程序继续往下执行

yj269172025 发表于 2013-12-26 21:35:25

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

︶ㄣ痕迹の天涯 发表于 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,没有被赋值,默认判断成立,全部输出。。。。

alac 发表于 2013-12-27 12:10:58

︶ㄣ痕迹の天涯 发表于 2013-12-26 21:42 static/image/common/back.gif
首先,我必须告诉你,你这个程序本身就乱七八糟,利用scanf何必还要分开,下面是对的
#include
void main ...

你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的?

︶ㄣ痕迹の天涯 发表于 2013-12-27 22:00:22

alac 发表于 2013-12-27 12:10 static/image/common/back.gif
你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的?

scanf 就是一个输入函数,这能体现什么功能?

alac 发表于 2013-12-27 22:36:11

︶ㄣ痕迹の天涯 发表于 2013-12-27 22:00 static/image/common/back.gif
scanf 就是一个输入函数,这能体现什么功能?

但是你完全理解这个函数怎么用了吗?

wjwjwjwj 发表于 2013-12-28 09:13:58

应该是char问题,当输入12回车时内存中有3个字符,第一次接收1,然后是2,第3个是回车,那么3个if条件都满足所以都输出,另外C没有用scanf输入,所以里面是随机数自然不等于3,所以条件3成立输出
页: [1]
查看完整版本: sanf()函数的奥秘