1. 程式人生 > >C語言scanf()和gets()及printf()和puts()的區別

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

http://blog.csdn.net/xingjiarong/article/details/47282817

一、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;
}

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

#include<stdio.h>

int main()
{
    char a[10];

    gets(a);

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


    return 0;
}

從鍵盤輸入字串 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;
}

輸入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方法輸出完字串後會自動換行。