偶然一个机会,在linux下发现了这个问题,现在列举他们的区别:
1. scanf用于格式化接受用户输入,他与cin区别不大,用惯了c的哥们肯定更倾向与直接用scanf做格式化输入。格式化输入是格式化输出的逆向过程,大家想象下面这个scanf会是什么现象呢?
char s[40] = “12345678”;
scanf(“%s
“, s);
你调试一下就会发现,这个时候你必须敲两下回车,scanf才会返回,两个回车符中,第一个就是格式化串”%s
“中的
,第二个就是系统默认的字符串结束符。
2. fgets用于获取文件流中的字符,注意,
当然也算字符哟,而且文件流不仅仅包括磁盘上的文件,也包括内存文件,标准输入(stdin)、标准输出(stdout)等等,在linux下,文件流更是包含了串口、网络、驱动程序等等抽象的输入输出接口。
呵呵,别扯远了,看看下面这个例子,就可以很好的理解fgets和scanf的区别了:
scanf(“%s”, s);
cout << strlen(s) << , << sizeof(s) <<
;
fgets(s, 39, stdin);
cout << strlen(s) << , << sizeof(s) <<
;
也许你会想,第一个scanf用于接受用户输入,用户敲回车后,第二个fgets会接受用户的另一个输入,但是结果不是这样的,比如你这样敲:
> 123456回车
那么程序会一直执行到第四条语句,如果单步调试,你会发现当你回车后,s首先为123456