gets(a),gets(c)为什么不会要求输入
#include <stdio.h>
#include <string.h>
char z;
int main()
{
int n=0,i=0,j=0,sum=0,k=0,p=0,b[100]={0};
char a[100],c[100], d[100];
scanf("%d",&n);
printf("\n");
gets(a);
for (i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
gets(c);
gets(d);
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (c[i]==a[j])
{
k++;
break;
}
}
}
if (k==n)
{
k=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (d[i]==a[j])
{
k++;
break;
}
}
}
}
if (k==n)
{
for (i=0;i<n;i++)
{
if (c[i]==d[i])
{
p=b[i];
sum=sum+p;
}
}
}
printf("%d\n",sum);
getch(z);
return 0;
}
例:input:
3
abc
1 1 1
abc
ccc
3
abc
1 1 1
ccc
aba
output:
1
0
在turbo c3.0上调试时走到gets(a)和gets(c)时,为什么直接走下去了。谁帮忙看看代码是否有错。
[解决办法]
系统有字符缓冲区,scanf、gets等从字符缓冲区中取数据。
scanf("%d",&b[i]); 用来接收一个整型数,而我们在键盘上输入一个整型数结束后,还要敲入一个回车符表示结束。而使用scanf为整型数赋值时,回车符前面的字符被处理并从字符缓冲区中清除,但回车符还保留在其中。
gets函数恰好又是遇到回车符便结束的,而且会将回车符读进来(也会从缓冲区中清除掉该回车符)。
所以...