日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fgets和scanf的区别

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fgets和scanf的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fgets和scanf的區別

1、測試使用scanf的一個例子:

?

[cpp]?view plaincopyprint?
  • #include?"stdio.h"??
  • #include?"string.h"??
  • ??
  • ??
  • int?main()??
  • {??
  • ????char?name[10];??
  • ????scanf("%s",?name);??
  • ??
  • ????puts(name);???
  • ??
  • ??
  • ????return?0;??
  • }??
  • ?

    編譯、調用如下:

    ?

    可以看到第二次,由于輸入的字符串長度,導致Abort

    ?

    ?

    ?

    2、同樣的一個fgets的例子:

    [cpp]?view plaincopyprint?
  • #include?"stdio.h"??
  • #include?"string.h"??
  • ??
  • ??
  • int?main()??
  • {??
  • ????char?name[10];??
  • ????fgets(name,?10,?stdin);??
  • ??
  • ????puts(name);???
  • ??
  • ??
  • ????return?0;??
  • }??
  • 編譯、調用如下:

    ?

    并沒有像scanf那樣出現Abort的情況,而是對字符串進行了截斷

    ?

    3、對比scanf和fgets:

    a) scanf不限制用戶的輸入,導致會出現上面測試例子的Abort

    fgets限制用戶的輸入,超過之后進行截斷字符串的操作,避免了Abort,但是要設置一個緩沖區長度值

    ?

    b) scanf可以使用諸如scanf("%d/%d", &x, &y),這樣的形式,讓用戶只需要輸入1/3便可以分別得到x、y的值:

    [cpp]?view plaincopyprint?
  • #include?"stdio.h"??
  • ??
  • ??
  • int?main()??
  • {??
  • ????int?x;??
  • ????int?y;??
  • ????scanf("%d/%d",?&x,?&y);??
  • ????printf("x?value?:?%d,?y?value?:?%d\n",?x,?y);??
  • ??
  • ????return?0;??
  • }??
  • ?

    但是fgets,無論如何,每次都只能讀入一個變量,而且只能是字符串(畢竟說是str嘛!),像下面這樣的形式,編譯是通不過的:

    [cpp]?view plaincopyprint?
  • #include?"stdio.h"??
  • ??
  • ??
  • int?main()??
  • {??
  • ????int?x;??
  • ????fgets(x,?sizeof(x),?stdin);??
  • ????printf("x?value?:?%d",?x);??
  • ??
  • ????return?0;??
  • }??
  • ?

    ?

    c)字符串中的空格

    scanf用%s接收字符串的時候,遇到空格就會停止。如果想輸入多個單詞,需要多次調用scanf()

    fgets()直接接收字符串中的空格

    ?

    ?

    4、總結

    由于3提到的一些區別,所以在使用scanf()和fgets()的時候,要注意情況。

    轉載于:https://www.cnblogs.com/lcx4/p/4714280.html

    總結

    以上是生活随笔為你收集整理的fgets和scanf的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。