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
这是为什么,谁能详细解答这些数据是怎么被处理的?谢了
因为没有else 所以程序继续往下执行 我记得,scanf在接受输入的时候是遇到一个结束符停止输入,但是在读取缓冲区的数据时,并不是立即结束,我猜想你的输入12回车之后立马就打印这些信息了;大概是,scanf在等待输入,当你回车之后,scanf在输入缓冲区中先把1赋给a,然后将2赋给b,最后将回车符赋给c,而你的判断有是分别开始的,那么刚好每一个条件都成立,所以都打印了。我还记得,以前我为了避免这个问题的时候,在为一个字符型使用scanf赋值的时候首先使用getch()函数除去缓冲区的东西,然后再使用scanf给其赋值。具体怎么回事,我也说不上来,你就不要会问了哈,我只知道这么多了... 首先,我必须告诉你,你这个程序本身就乱七八糟,利用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,没有被赋值,默认判断成立,全部输出。。。。
︶ㄣ痕迹の天涯 发表于 2013-12-26 21:42 static/image/common/back.gif
首先,我必须告诉你,你这个程序本身就乱七八糟,利用scanf何必还要分开,下面是对的
#include
void main ...
你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的? alac 发表于 2013-12-27 12:10 static/image/common/back.gif
你可能理解错我的意思了,我写上面程序的目的是弄清scanf()函数是怎样的?
scanf 就是一个输入函数,这能体现什么功能? ︶ㄣ痕迹の天涯 发表于 2013-12-27 22:00 static/image/common/back.gif
scanf 就是一个输入函数,这能体现什么功能?
但是你完全理解这个函数怎么用了吗? 应该是char问题,当输入12回车时内存中有3个字符,第一次接收1,然后是2,第3个是回车,那么3个if条件都满足所以都输出,另外C没有用scanf输入,所以里面是随机数自然不等于3,所以条件3成立输出
页:
[1]