真心蒙了。关于输入格式及空格回车的有关问题
真心蒙了。。关于输入格式及空格回车的问题
#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'.
------解决方案--------------------
空格要不要被洗掉就看你对程序的流程控制了
如果想要更进一步了解缓冲区的话,可以去看看操作系统,里面讲的比较细致
#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'.
------解决方案--------------------
空格要不要被洗掉就看你对程序的流程控制了
如果想要更进一步了解缓冲区的话,可以去看看操作系统,里面讲的比较细致