真心蒙了。关于输入格式及空格回车的有关问题

真心蒙了。。关于输入格式及空格回车的问题
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{   int m,i;
    float length,len2,len1,s,w,n,e;
    float sumw=0,sums=0,sume=0,sumn=0;
    char ch,ch1;
  scanf("%d",&m);
 for(i=0;i<m;i++){
    ch=getchar();

     switch(ch){
     case 'E' : scanf("%f",&e);ch1=getchar();  sume=sume+e;break;
     case 'N' : scanf("%f",&n);ch1=getchar(); sumn=sumn+n;break;
     case 'W' : scanf("%f",&w);ch1=getchar(); sumw=sumw+w;break;
     case 'S' : scanf("%f",&s);ch1=getchar(); sums=sums+s;break;

    }
}
len1=sume-sumw;
len2=sums-sumn;
length=sqrt(len1*len1+len2*len2);
printf("%f",length);
    return 0;
}
希望输入格式是这样的

真心蒙了。关于输入格式及空格回车的有关问题
为什么总是不到数的时候就执行了,那个什么缓冲字符的要在哪里放好啊

------解决方案--------------------
第一次输入的时候,在scanf("%d",&m);后面加一个getchar();吸收回车就行了
------解决方案--------------------
也可以将 ch=getchar();
改成 scanf(" %c",&ch);
注意scanf中 格式化字符串第一个留作空格,这个空格将吸收 IO缓冲区剩下来的 换行符'\n'.
------解决方案--------------------
引用:
嗯,谢谢各位,还有能稍微科普下那个缓冲区的知识吗?空格要不要吸收掉??

空格要不要被洗掉就看你对程序的流程控制了
如果想要更进一步了解缓冲区的话,可以去看看操作系统,里面讲的比较细致