scanf()在读取数字时会跳过空格、制表符和换行符!
但是除了scanf输入函数时还有其他例如getchar(),gets的输入函数,他们可能会把回车 空格 制表符输入进入缓存区,这样就会导致程序的错误。
在解决这类问题的时候有一个方法,就是在下次非scanf函数输入前,添加一个getchar()函数,使回车键不被键入缓存区,这样就不会导致程序出现错误。
例如代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,j;
char password[20];
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
int daxie=0,xiaoxie=0,shuzi=0,special=0;
gets(password);
int length=strlen(password);
if(length<8||length>16)
{printf("NO\n");
return 0;}
for(j=0;j<length;j++)
{
if(password[j]>='A'&&password[j]<='Z')
daxie=1;
if(password[j]>='a'&&password[j]<='z')
xiaoxie=1;
if(password[j]>='0'&&password[j]<='9')
shuzi=1;
if(password[j]=='~'||password[j]=='!'||password[j]=='@'||password[j]=='#'||password[j]=='$'||password[j]=='%'||password[j]=='^')
special=1;
if(daxie+xiaoxie+shuzi+special>=3)
{printf("YES\n");
break;}
}
if(daxie+xiaoxie+shuzi+special<3)
printf("NO\n");
}
return 0;
如果不在gets()输入函数之前添加一个getchar()函数的话,程序就会出现错误误把“空格”键入缓存区,作为字符串的输入导致程序判断出现错误。