Posted on 2006-04-29 14:12
魔のkyo 阅读(408)
评论(0) 编辑 收藏 引用 所属分类:
Programming
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'去掉