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返回值和缓冲区没有清理引起的。