首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

gets(a),gets(c)为什么不会要求输入解决方案

2012-03-15 
gets(a),gets(c)为什么不会要求输入#include stdio.h#include string.hchar zint main(){int n0,i0

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函数恰好又是遇到回车符便结束的,而且会将回车符读进来(也会从缓冲区中清除掉该回车符)。

所以...

热点排行