fgets和scanf的区别
生活随笔
收集整理的這篇文章主要介紹了
fgets和scanf的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
fgets和scanf的區別
1、測試使用scanf的一個例子:?
[cpp]?view plaincopyprint??
編譯、調用如下:
?
可以看到第二次,由于輸入的字符串長度,導致Abort
?
?
?
2、同樣的一個fgets的例子:
[cpp]?view plaincopyprint?編譯、調用如下:
?
并沒有像scanf那樣出現Abort的情況,而是對字符串進行了截斷
?
3、對比scanf和fgets:
a) scanf不限制用戶的輸入,導致會出現上面測試例子的Abort
fgets限制用戶的輸入,超過之后進行截斷字符串的操作,避免了Abort,但是要設置一個緩沖區長度值
?
b) scanf可以使用諸如scanf("%d/%d", &x, &y),這樣的形式,讓用戶只需要輸入1/3便可以分別得到x、y的值:
[cpp]?view plaincopyprint??
但是fgets,無論如何,每次都只能讀入一個變量,而且只能是字符串(畢竟說是str嘛!),像下面這樣的形式,編譯是通不過的:
[cpp]?view plaincopyprint??
?
c)字符串中的空格
scanf用%s接收字符串的時候,遇到空格就會停止。如果想輸入多個單詞,需要多次調用scanf()
fgets()直接接收字符串中的空格
?
?
4、總結
由于3提到的一些區別,所以在使用scanf()和fgets()的時候,要注意情況。
轉載于:https://www.cnblogs.com/lcx4/p/4714280.html
總結
以上是生活随笔為你收集整理的fgets和scanf的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos文本查看及处理相关的常用命令
- 下一篇: ios-晋级之路 CocoaPods引用