C语言,“\n”这个是换行的符号,那运行有什么区别

#include <stdio.h>
#include<math.h>
int main(int argc, char *argv[])
{
double x1,y1,x2,y2 ,s;
scanf("%lf%lf%lf%lf\n",&x1,&y1,&x2,&y2);
s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2lf\n",s) ;
return 0;
}


#include <stdio.h>
#include<math.h>
int main(int argc, char *argv[])
{
double x1,y1,x2,y2 ,s;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2lf\n",s) ;
return 0;
}
为什么第二个可以正常运行,而第一个不行。
输入的是 100 99 0 0就有问题了

对应于scanf("...\n",...);
你输入n个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入,scanf语句才结束。

但请注意的是,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。因此你需要多输入一个数字——>5个数字,来将缓冲区的前4个给到你的x1,x2,y1,y2。追问

那为什么有些scanf("…\n",…)要输入n个,然后事实输入n个再加\n也是行得通的

追答

这个没遇到过。以你自己的测试环境为准。我是在VC2005测试的,上面的解释也符合测试结果。如果环境不一样,那么得到不同的结果也是说得过去的。这种事情没必要这么纠结。
我的环境中,以你说的输入n个数再输入\n,不能得到预期结果。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-30
没有差别,不该有问题啊
第2个回答  2014-10-30
3
4
5
6
7
2.83

可以运行
相似回答