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

C语言中输入缓冲区有关问题

2012-06-14 
C语言中输入缓冲区问题int main(){int *data NULL,*data2,lengthscanf(%d,&length)//线性表长度data

C语言中输入缓冲区问题
int main()
{
  int *data = NULL,*data2,length;
  scanf("%d",&length);//线性表长度
  data = (int *)malloc(length*sizeof(int));
  for(int i = 0;i < length; ++i)
  {
  scanf("%d ",&data[i]);//输入内容
  }
------------------------------------------------------
  data2 = (int *)malloc(length*sizeof(int));
  mergesort(data,data2,0,length - 1);
  for(int i = 0;i < length;i ++)
  printf("%d\n",data[i]);
  return 0;
}

如上代码,我在输入
3
2 3 1回车

这个时候,闪烁光标就会定到那儿,知道我任意输入一些东西时,才继续执行分割线下的代码,加getchar()也不顶用。

[解决办法]
把那个空格键加在前面!

C/C++ code
scanf(" %d",&data[i]);//输入内容
[解决办法]
scanf函数的格式串中遇到一个或多个连续的空白字符时,scanf函数会从输入中重复读取空白字符直到遇到一个非空白字符(并把该字符“放回原处”)为止。空白字符(white-space character,包括空格符,水平和垂直制表符,换页符,换行符)。
[解决办法]
因为你那个回车符还在缓冲区里面,用getchar();后将缓冲区里面的回车符'\0'取出。
[解决办法]
输入缓冲区问题,你可以尝试下:
scanf("%d",&a);
scanf("%c",&b);
然后输入一个字符,你会发现字符赋给b了,那就是没有判断scanf返回值和缓冲区没有清理引起的。

热点排行