background image

  printf("%s",str); 

  return 0;

  }

  输入:I love you!

  输出:scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束

该 scanf 函数,scanf 函数仅在每一个数据域均有数据,并按回车后结束)。

 

” “

  ① 遇空格、 回车 、 跳格 键。

 

  ② 遇宽度结束。

 

  ③ 遇非法输入。

  所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对 str 的赋

值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问

题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾

指针已经相等了,也就是说缓冲区清空了,scanf()函数应该只是扫描 stdin 流,这个残存

信息是在 stdin 中)。我们改动一下上面的程序来验证一下:

  #include

  int main()

  {

  char str[80];

  char str1[80];

  char str2[80];

  scanf("%s",str);

  printf("%s",str);

  sleep(5);

  scanf("%s",str1);

  scanf("%s",str2);

  printf("/n%s",str1);

  printf("/n%s",str2);

  return 0;

  }