scanf对溢出输入的行为

时间:2012-09-07 09:05:27

标签: c scanf

我在运行以下代码时遇到一些问题。如果我向scanf方法馈送数组a提供了超过五个字符的输入,则其余字符将进入数组b,并且我无法再次提供输入。我尝试使用fflush(),但它没有帮助。发生了什么,我该如何解决?

#include<stdio.h>

int main()
{
 char a[6];
 char b[20];

 printf("Enter any string :\n");
 scanf("%5s",a);

 printf("%s\n",a);

 fflush(stdin); 

 scanf("%s",b);
 printf("%s\n",b);

 return 0;
}

1 个答案:

答案 0 :(得分:2)

你永远不应该使用fflush(stdin)清除输入缓冲区,它的未定义行为,只有Microsoft-CRT支持这个。

#include<stdio.h>

int main()
{
 int c;
 char a[6];
 char b[20];

 printf("Enter any string :\n");
 scanf("%5s",a);

 printf("%s\n",a);

 while( (c=getchar())!=EOF && c!='\n' ); 

 scanf("%19s",b);
 printf("%s\n",b);

 return 0;
}