今天做C语言题目的时候遇到的这么一个题
下面是我写的一段代码
#include<stdio.h>
#include<string.h>
int main()
{
char c[80];
int a,e,i,o,u;
int x,n,k,z;
scanf("%d",&n);
for(x=1;x<=n;x++)
{
a=e=i=o=u=0;
gets(c);
z=strlen(c);
for(k=0;k<z;k++)
{
if(c[k]=='a'||c[k]=='A'||c[k]=='h'||c[k]=='H')
a++;
if(c[k]=='e'||c[k]=='E')
e++;
if(c[k]=='i'||c[k]=='I'||c[k]=='Y'||c[k]=='y')
i++;
if(c[k]=='o'||c[k]=='O')
o++;
if(c[k]=='u'||c[k]=='U')
u++;
}
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d",a,e,i,o,u);
printf("\n");
}
}
运行结果如下
输入的是2,实际上有用的循环只又一次,还有一次循环在输入2后按下回车就立即运行了一次,为了看明白怎么回事,把代码简化一下再运行
注意上图的空格,这个空格既是scanf结束的标志,又作为字符输进了gers里面
那么该怎么解决这个问题呢?
经过反复实验后发现,我们只需要在scanf后面加上getchar就行了,运行结果如下
我们可以发现空格消失了,但这种方法也就用于调整格式,因为一个getchar只能存一个字符,要是空格或是回车等多输入了也就不行了,比如下面这样
但可以根据实际情况自己来调整,觉得有用就点个赞吧。