C語言scanf()和gets()及printf()和puts()的區別 C語言scanf()和gets()及printf()和puts()的區別

C語言scanf()和gets()及printf()和puts()的區別

一、scanf()和gets()

1.scanf()

所在頭文件:stdio.h

語法:scanf(“格式控制字符串”,變量地址列表);

接受字符串時:scanf(“%s”,字符數組名或指針);

2.gets()

所在頭文件:stdio.h

語法:gets(字符數組名或指針);

兩者在接受字符串時:

1.不同點:

scanf不能接受空格、製表符Tab、回車等;

而gets能夠接受空格、製表符Tab和回車等;

scanf :當遇到回車,空格和tab鍵會自動在字符串後面添加’\0’,但是回車,空格和tab鍵仍會留在輸入的緩衝區中。

gets:可接受回車鍵之前輸入的所有字符,並用’\0’替代 ‘\n’.回車鍵不會留在輸入緩衝區中

#include<stdio.h>

int main()
{
    char a[10];

    scanf("%s",a);

    printf("%s\n",a);


    return 0;
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

從鍵盤輸入字符串 asd df時,遇到空格,scanf()就認爲輸入結束了,所以a中存放的字符串是 ‘asd\0’。

#include<stdio.h>

int main()
{
    char a[10];

    gets(a);

    printf("%s\n",a);


    return 0;
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

從鍵盤輸入字符串 asd df時,gets()遇到’\n’才認爲是結束輸入了,所以a中存放的是’asd df\0’。

#include<stdio.h>

int main()
{
    char a[10],b[10];
    char c,d;
    scanf("%s",a);
    printf("a中保存的字符串爲:%s\n",a);

    c=getchar();
    printf("c中保存的字符爲:%c ",c);

    gets(b);
    printf("b中保存的字符串爲:%s\n",b);

    d=getchar();
    printf("d中保存的字符爲:%c",d);

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

輸入asdf回車,因爲scanf會將回車保留在緩衝區中,所以回車會緊接着被c取得而不需要再額外輸入,所以a中存儲的是’asdf\0’,字符c=’\n’。結果如下:
這裏寫圖片描述

接着輸入as df回車,因爲gets會將’\n’替換成’\0’,所以b字符串中保留的是’as df\0’,並且還是要繼續輸入d的值:
這裏寫圖片描述

最後輸入d的值:
這裏寫圖片描述

二、printf()和puts()的區別

相同點:
兩者都屬於stdio.h這個頭文件
都能輸出字符串

不同點:
puts()在輸出字符串時會將’\0’自動轉換成’\n’進行輸出,也就是說,puts方法輸出完字符串後會自動換行。

這一組比較簡單,就不再舉例子了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章