posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

fgets(str,20,stdin);
gets(str);
scanf("%[^\n]",str);

fgets(str,20,stdin)将行尾的'\n'从输入流取出并放入字符串中.
 PS:20中包括了'\0',实际至多从输入流中提取19个字符
gets(str)函数将行尾的'\n'从输入流中取出并丢弃

scanf("%[^\n]",str)不将行尾的'\n'取出(保留在输入流中)
 PS:如果加上长度限制scanf("%20[^\n]",str),这里20不包括'\0'的,需要程序员自己保留
测试环境:VC++6.0,Dev-C++4.9.9.0(编译器:g++)
两个环境下结果相同

结论:不知道为什么fgets要这样设定?为什么不和gets保持一致?
用scanf("%[^\n]",str)的时候可以紧跟一个getchar();把后面一个不需要的'\n'去掉

只有注册用户登录后才能发表评论。